如何获得多个相同的最大值
How to get multiple identical maximum values
我正在尝试构建一个查询,该查询为我提供了一些拥有最大金额总和的用户。我可以通过 limit 1
获得最大值。但是由于多个用户可能具有相同的最大值,我该如何实现呢?
例如我有 table 作为 ID, CONTACT_ID, ..., AMOUNT, ....
目前我正在使用这种查询:
SELECT SUM(AMOUNT) AS total,CONTACT_ID
FROM TABLE
WHERE ID = 1
GROUP BY CONTACT_ID
ORDER BY total DESC limit 1
如果我尝试使用 MAX() 函数。它给了我所有的行而不是最大值。
SELECT total,CONTACT_ID FROM
(SELECT SUM(AMOUNT) AS total,CONTACT_ID
FROM TABLE
WHERE ID = 1
GROUP BY CONTACT_ID
ORDER BY total DESC)
GROUP BY CONTACT_ID
HAVING total = MAX(total)
乍一看,我会使用次要请求,例如:
SELECT SUM(AMOUNT) AS total,CONTACT_ID
FROM TABLE
WHERE ID = 1
AND total=(SELECT MAX(SUM(AMOUNT)) FROM TABLE GROUP BY CONTACT_ID)
GROUP BY CONTACT_ID
ORDER BY total DESC
注意:WHERE ID = 1;来自您的第一个请求
HAVING 在聚合完成后应用。因此,每个组中的 MAX(total)
行已经被选中,这意味着 剩下的唯一 total
值是 最大值。
您需要分两步完成此操作:首先确定最大总数,然后获取具有该值的所有行:
SELECT total, CONTACT_ID
FROM (SELECT SUM(AMOUNT) AS total, CONTACT_ID
FROM MyTable
WHERE ID = 1
GROUP BY CONTACT_ID)
WHERE total = (SELECT SUM(AMOUNT)
FROM MyTable
WHERE ID = 1
GROUP BY CONTACT_ID
ORDER BY 1 DESC
LIMIT 1);
我正在尝试构建一个查询,该查询为我提供了一些拥有最大金额总和的用户。我可以通过 limit 1
获得最大值。但是由于多个用户可能具有相同的最大值,我该如何实现呢?
例如我有 table 作为 ID, CONTACT_ID, ..., AMOUNT, ....
目前我正在使用这种查询:
SELECT SUM(AMOUNT) AS total,CONTACT_ID
FROM TABLE
WHERE ID = 1
GROUP BY CONTACT_ID
ORDER BY total DESC limit 1
如果我尝试使用 MAX() 函数。它给了我所有的行而不是最大值。
SELECT total,CONTACT_ID FROM
(SELECT SUM(AMOUNT) AS total,CONTACT_ID
FROM TABLE
WHERE ID = 1
GROUP BY CONTACT_ID
ORDER BY total DESC)
GROUP BY CONTACT_ID
HAVING total = MAX(total)
乍一看,我会使用次要请求,例如:
SELECT SUM(AMOUNT) AS total,CONTACT_ID
FROM TABLE
WHERE ID = 1
AND total=(SELECT MAX(SUM(AMOUNT)) FROM TABLE GROUP BY CONTACT_ID)
GROUP BY CONTACT_ID
ORDER BY total DESC
注意:WHERE ID = 1;来自您的第一个请求
HAVING 在聚合完成后应用。因此,每个组中的 MAX(total)
行已经被选中,这意味着 剩下的唯一 total
值是 最大值。
您需要分两步完成此操作:首先确定最大总数,然后获取具有该值的所有行:
SELECT total, CONTACT_ID
FROM (SELECT SUM(AMOUNT) AS total, CONTACT_ID
FROM MyTable
WHERE ID = 1
GROUP BY CONTACT_ID)
WHERE total = (SELECT SUM(AMOUNT)
FROM MyTable
WHERE ID = 1
GROUP BY CONTACT_ID
ORDER BY 1 DESC
LIMIT 1);