SQL:输出属于其中所有国家/地区都相同的类别的所有名称

时间:2019-03-29 14:35:24

标签: mysql sql count

我有下表称为商店:

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

我知道如何计算每个类别的条目数,但是如何判断一个类别中的所有国家/地区是否相同?任何见解都会受到赞赏。

3 个答案:

答案 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。