mysql:如果列等于this或that,则对行进行分组

kpbpu008  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(377)

我有一张这样的简单table。

Restaurant      Category
-------------------------
Restaurant1     American
Restaurant1     French
Restaurant2     American
Restaurant2     French

看那张table,我可以看出餐馆有美式和法式两种。我还可以看到餐馆有美式和法式两种。看到这一点,我可以说有两个职位,既有美国和法国的类别。
有没有可能把它翻译成mysql?因此,查询必须类似于“getcount(restaurant)group by restaurant if category=american and category=french”。我知道这对mysql没有任何意义,但我似乎不知道如何做到这一点。
我注意到,如果美国和法国是分组的,如果职位是平等的,那么我可以很容易地按餐厅分组,但我不确定是否有一种方法在mysql中做到这一点。
举一个现实世界的例子,我试着统计一下wordpress中有多少帖子同时具有id为22的类别和id为25的类别。下面的查询应该返回3。这是有多少职位有22和25类。

SELECT COUNT(tr.object_id) AS post_count 
FROM wp_term_relationships AS tr
WHERE tr.term_taxonomy_id=25 AND tr.term_taxonomy_id=22

以前有人碰到过这个问题吗?

hgqdbh6s

hgqdbh6s1#

您可以使用这样的查询。它使用一个派生表来计算每个餐厅有多少不同的类别与之匹配 American 或者 French . 然后,它将拥有两个匹配类别的餐厅的数量相加,即它们都是 American 以及 French .

SELECT COUNT(Restaurant)
FROM (SELECT Restaurant, COUNT(DISTINCT Category) AS Am_or_Fr
      FROM restaurants
      WHERE Category IN ('American', 'French')
      GROUP BY Restaurant) r
WHERE Am_or_Fr = 2

输出(用于示例数据)

2

sqlfiddle上的一个小演示
更新
对于添加到帖子中的查询,您需要将其重写为:

SELECT COUNT(t.object_id) AS post_count 
FROM (SELECT tr.object_id, COUNT(DISTINCT tr.term_taxonomy_id) AS term_count
      FROM wp_term_relationships AS tr
      WHERE tr.term_taxonomy_id IN (22, 25)
      GROUP BY tr.object_id) t
WHERE term_count = 2

相关问题