Sql - 使用最大值来选择其他数据

时间:2011-01-29 18:00:56

标签: sql mysql

我对检索表的最大价值并在另一个查询中使用它的方式存在很大疑问。

考虑一下:

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)

但不起作用,实现此请求的最佳方式是什么?

谢谢:)

1 个答案:

答案 0 :(得分:5)

这种技术应该适用于大多数数据库:

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
)