我对检索表的最大值并将其用于另一个查询的方法有很大疑问。
考虑一下:
CREATE TABLE people
(
peopleID int NOT NULL,
cityID int NOT NULL
)
下面的请求给出了每个城市的人数
SELECT peopleID, COUNT(*)
FROM people
GROUP BY cityID
假设我想要最大城市的人员列表,我会这样写这个请求:
SELECT people.peopleID, people.cityID
FROM people,
(
SELECT cityID, COUNT(*) AS "people_count"
FROM people
GROUP BY cityID
) g
WHERE people.cityID = g.cityID
HAVING people_count = MIN(people_count)
但不起作用,实现此请求的最佳方法是什么?
谢谢:)
最佳答案
这种技术应该适用于大多数数据库:
SELECT peopleID
FROM people
WHERE cityID =
(
SELECT cityID
FROM people
GROUP BY cityID
ORDER BY COUNT(*) DESC
LIMIT 1
)
LIMIT 1 不是标准 SQL(标准声明您应该仅使用 FETCH FIRST 1 ROWS)。有关如何仅获取各种数据库中的第一行的列表,请参见此处:
编辑:我误解了你的问题。我认为您的意思是什么是执行此查询的明智方法,可以轻松修改以在几乎任何 SQL 数据库中工作。但事实证明,您真正想知道的是如何编写查询,以便它可以在所有数据库中使用完全相同的语法。即使是没有人使用的随机数据库也不能正确支持 SQL 标准。在这种情况下,您可以尝试这个,但我相信您可以找到一个数据库,但即使这样也行不通:
SELECT peopleID, cityID
FROM people
WHERE cityID = (
SELECT MAX(cityID)
FROM (
SELECT cityID
FROM people
GROUP BY cityID
HAVING COUNT(*) =
(
SELECT MAX(cnt) FROM
(
SELECT cityID, COUNT(*) AS cnt
FROM people
GROUP BY cityID
) T1
)
) T2
)
关于Sql - 使用最大值来选择其他数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4838487/