我有下表称为商店:
Name | Country | Category
Pharmacy Japan Health
Green Vine Italy Dining
Red Palace Morocco Dining
La Pizza Italy Dining
Nature Shop Japan Health
Medical 100 Japan Health
我想编写一个查询,该查询输出所有国家/地区都属于同一类别(例如,“健康”类别中的所有商店都在日本)的所有名称。例如。输出为:
Name | Country | Category
Pharmacy Japan Health
Nature Shop Japan Health
Medical 100 Japan Health
我知道如何计算每个类别的条目数,但是如何判断一个类别中的所有国家/地区是否相同?任何见解都会受到赞赏。
答案 0 :(得分:0)
您可以使用EXISTS
:
SELECT t.*
FROM table t
WHERE EXISTS (SELECT 1
FROM table t1
WHERE t1.Country = t.Country AND
t1.category = t.category AND
t1.Name <> t.Name
);
答案 1 :(得分:0)
您可以将聚合与HAVING
子句一起使用,该子句检查某个类别的最小国家/地区与最大国家/地区相同,即所有国家/地区都相同(如果不能有NULL
,似乎是这样)。然后内部加入这些类别。
SELECT *
FROM elbat t1
INNER JOIN (SELECT t2.category
FROM elbat t2
GROUP BY t2.category
HAVING max(t2.country) = min(t2.country)) x
ON x.category = t1.category;
答案 2 :(得分:0)
您可以使用以下查询来获取所有国家/地区都相同的所有此类类别:
Select t.category
From table t
Group by t.category
Having count(distinct country)=1
然后您可以使用它来获取商店名称:
Select t.name
From table t
Where t.category in
( Select t.category
From table t
Group by t.category
Having count(distinct country)=1)
此语法与MS sql服务器兼容,但我希望逻辑可以转换为mysql。