gpt4 book ai didi

MySql - 在不使用任何聚合函数的情况下查找至少出现两次的值

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:35 25 4
gpt4 key购买 nike

表:城市

City_Name (PK)    State_Name (PK)    Population
-------------- --------------- ----------
Austin MA
Austin TX
Burlington VT
Fresno CA
Houston TX
Independence KS
Independence MO
Independence PA
Kansas CA
Kansas MO
Paris MO
Paris OR
Paris TX
Paris VA
Paso TX

上表有一个复合主键(City_Name 和 State_Name)。我想找到出现在至少两个不同州的城市。在这种情况下,结果将是

City_Name
---------
Austin
Independence
Kansas
Paris

其他城市将不符合条件,因为它们不会出现在至少两个州。

此解决方案是练习关系演算问题所必需的,因此(不幸的是)不能使用诸如 COUNT() 之类的聚合函数。我浏览了一本数据库书籍,其中我看到了类似问题的解决方案,看起来像这样,但没有用。

SELECT c1.State_Name FROM City AS c1
JOIN City AS c2 on c1.City_Name = c2.City_Name AND c1.State_Name = c2.State_Name
JOIN City AS c3 on c1.City_Name = c3.City_Name AND c1.State_Name = c3.State_Name
WHERE (c2.City_Name<>c3.City_Name) AND (c2.State_Name<>c3.State_Name);

此时的一些帮助将非常受欢迎。

最佳答案

您可以使用 COUNT(DISTINCT) 并使用 HAVING 子句限制您的结果:

SELECT City_Name, COUNT(DISTINCT State_Name)
FROM City
GROUP BY City_NAME
HAVING COUNT(DISTINCT State_Name) > 1

参见 COUNT(DISTINCT) 的文档

Returns a count of the number of rows with different non-NULL expr values.

我忽略了不能使用 COUNT() 的限制。这确实会导致自连接:

SELECT
DISTINCT c1.City_Name
FROM
City c1
INNER JOIN
City c2
ON
c1.City_Name = c2.City_Name
AND
c1.State_Name <> c2.State_Name

Demo对于这两种解决方案。

关于MySql - 在不使用任何聚合函数的情况下查找至少出现两次的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434344/

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