Получите количество отдельных экземпляров значения в MySQL - PullRequest
2 голосов
/ 28 мая 2020

У меня есть таблица с двумя полями, inbound и outbound, оба из которых являются текстовыми значениями. Я хочу получить все количество всех экземпляров указанного c значения в одном или обоих этих столбцах.

Вот пример схемы с некоторыми значениями и моим запросом:

CREATE TABLE widgets (
  id int(5) auto_increment,
  inbound varchar(200),
  outbound varchar(200),
  event_name varchar(255),
  start_time int(11),
  primary key(id)
  );

  INSERT INTO widgets values (NULL, 'my_widget', 'other_widget', 'STARTED', unix_timestamp());
  INSERT INTO widgets values (NULL, 'my_widget', 'my_widget', 'STARTED', unix_timestamp());
  INSERT INTO widgets values (NULL, 'my_widget', 'my_widget', 'STARTED', unix_timestamp());

SELECT count(*)
            FROM (
                SELECT inbound, outbound, event_name
                FROM `widgets`
                ORDER BY `start_time` DESC
                LIMIT 10000
            ) AS t
            WHERE
              (t.`inbound` = 'my_widget'
                OR
                t.`outbound` = 'my_widget'
              )
            AND event_name != 'FINISHED'

Вот SQL скрипка со схемой и моим текущим запросом

В настоящее время я получаю count из 3 появлений my_widget, однако я хочу посчитать все 5 появлений my_widget

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вы можете сделать что-то подобное с помощью оператора case, вот демонстрация .

select
  sum(total) as total
from
(
  select
    sum(case when inbound = 'my_widget' then 1 else 0 end) as total
  from widgets
  where event_name <> 'FINISHED'
  union all
  select
    sum(case when outbound = 'my_widget' then 1 else 0 end) as total
  from widgets
  where event_name <> 'FINISHED'
) t

Вывод:

*-------* 
| total |
*-------*
|    5  |
*-------*
0 голосов
/ 28 мая 2020

Если вы хотите подсчитать строк , используйте:

select count(*) as total
from widgets
where event_name <> 'FINISHED' and
      'my_widget' in (inbound, outbound);

Если вы хотите подсчитать строку дважды, если значение встречается дважды, тогда:

select sum(inbound = 'my_widget') + sum(outbound = 'my_widget')
from widgets
where event_name <> 'FINISHED' and
      'my_widget' in (inbound, outbound);

Здесь - скрипт db <>.

Обратите внимание, что для этого не требуется подзапрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...