SQL: подсчет на основе двух условий в одном столбце - PullRequest
1 голос
/ 23 апреля 2020

У меня в настоящее время есть таблица, которая выглядит примерно так:

+----+----------+--+------------+
| id | entry_id |  |   value    |
+----+----------+--+------------+
|  1 |       20 |  | name       |
|  2 |       20 |  | email      |
|  3 |       20 |  | Menu 1     |
|  4 |       20 |  | 2020-04-23 |
|  5 |       21 |  | name       |
|  6 |       21 |  | email      |
|  7 |       21 |  | Menu 1     |
|  8 |       21 |  | 2020-04-23 |
+----+----------+--+------------+

Теперь я хотел бы посчитать меню на определенную дату, что означает, что я хотел бы показать «2» для меню 1 в 2020-04-23:

+-------+
| count |
+-------+
|     2 |
+-------+

Мой текущий SQL выглядит следующим образом:

SELECT COUNT(entry_id) FROM my_table WHERE value IN ("Menu 1", "2020-04-23") GROUP BY entry_id HAVING COUNT(*) = 2

Однако, похоже, это не работает для меня. Есть ли способ подсчитать запись один раз, если выполнены два условия?

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Хммм. , , У вас очень загадочная модель данных. У вас есть ценности, но нет описания того, что они есть. Я ожидал бы где-нибудь значение «ключа».

Вы можете получить все подходящие записи, используя:

select entry_id
from my_table
where value in ('2020-04-03', 'Menu 1')
group by entry_id
having count(*) = 2

И получить счет:

select count(*)
from (select entry_id
      from my_table
      where value in ('2020-04-03', 'Menu 1')
      group by entry_id
      having count(*) = 2
     ) e
1 голос
/ 23 апреля 2020

Вы можете объединить таблицу с самой собой, чтобы найти нужные вам строки.

Например:

select count(distinct id)
from my_table a
join my_table b on a.entry_id = b.entry_id
where b.value = '2020-04-23'
  and a.value = 'Menu 1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...