gpt4 book ai didi

MySQL:如果列等于这个或那个,则对行进行分组

转载 作者:行者123 更新时间:2023-11-29 16:34:07 24 4
gpt4 key购买 nike

我有一个类似这样的简单表格。

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

查看该表,我可以看到 Restaurant1 有美式和法式类别。我还可以看到Restaurant2有美式和法式类别。看到这个,我可以说有 2 个帖子同时具有美国和法国类别。

是否可以将其翻译成MySQL?因此,查询必须类似于“如果类别 = 美国且类别 = 法国,则按餐厅获取计数(餐厅)组”。我知道这对 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

有人遇到过这个问题吗?

最佳答案

您可以使用这样的查询。它使用一个派生表,该表汇总了每家餐厅有多少个与美国法国匹配的不同类别。然后,它将具有 2 个匹配类别的餐厅数量相加,即它们都是美国法国

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

demo on 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

关于MySQL:如果列等于这个或那个,则对行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53716825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com