SQL:根据一列中的两个条件进行计数

时间:2020-04-23 15:51:26

标签: mysql sql database

我目前有一个与此表类似的表:

+----+----------+--+------------+
| 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 |
+----+----------+--+------------+

我现在想计算某个日期的菜单,这意味着我想在2020-04-23的菜单1上显示“ 2”:

+-------+
| 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 个答案:

答案 0 :(得分:2)

嗯。 。 。您有一个非常神秘的数据模型。您有值,但没有说明它们是什么。我希望某个地方有一个“关键”值。

您可以使用以下方法获取所有匹配的条目:

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 :(得分:1)

您可以将表与其自身相连,以查找所需的行。

例如:

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'