我目前有一个与此表类似的表:
+----+----------+--+------------+
| 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
但是,这似乎对我不起作用。如果满足两个条件,是否可以对条目进行一次计数?
感谢您的帮助!
答案 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'