[英]SQL Select Max Count Nested?
SELECT N.National_PosID, N.Title, C.First_Name, C.Mid_Name, C.Last_Name, count(*)
FROM National_Position N, Candidate C, Vote V
WHERE N.National_PosID = C.National_PosID AND V.Candidate_ID = C.Candidate_ID
Group by N.National_PosID, N.Title, C.First_Name, C.Mid_Name, C.Last_Name;
output
+------------+------------+----------+-----------+----------+
| Title | First_Name | Mid_Name | Last_Name | count(*) |
+------------+------------+----------+-----------+----------+
| Agueda | Sarahann | | MCMAHON | 557 |
| Amesha | Maurice | | GREEN | 1071 |
| Kiante | Jesicca | | WINTERS | 482 |
| Kieffer | Serene | | HIGGINS | 1285 |
| Koray | Ahley | | COLLIER | 1287 |
| SENATE | Daisy | Hao | MADDOX | 1316 |
| SENATE | Radhames | Jakson | MURILLO | 1269 |
| SENATE | Rayan | Kaitlynn | FRYE | 1089 |
| SENATE | Rio | Krysti | HUGHES | 457 |
| SENATE | Shalondra | Nila | HORTON | 551 |
+------------+------------+----------+-----------+----------+
10 rows in set (1.33 sec)
问题是我如何获得唯一最大计数的 output 。 仅输出最大票数行。 这是在 mysql 上运行的。
您可以使用subquery
来获取原始结果的max
count
。
SELECT t1.National_PosID, t1.Title, t1.First_Name, t1.Mid_Name, t1.Last_Name, max(ct)
FROM(
SELECT N.National_PosID, N.Title, C.First_Name, C.Mid_Name, C.Last_Name, count(*) ct
FROM National_Position N
INNER JOIN Candidate C ON N.National_PosID = C.National_PosID
INNER JOIN Vote V ON V.Candidate_ID = C.Candidate_ID
INNER JOIN
GROUP BY N.National_PosID, N.Title, C.First_Name, C.Mid_Name, C.Last_Name) as t1
GROUP BY t1.National_PosID, t1.Title, t1.First_Name, t1.Mid_Name, t1.Last_Name
如果您使用的是 Oracle(显示查询结果的方式表明),那么您可以使用FETCH FIRST N ROWS ONLY
语法来仅显示具有最大计数的记录。 此语法自 Oracle 12.1 起可用。
SELECT
N.National_PosID,
N.Title,
C.First_Name,
C.Mid_Name,
C.Last_Name, count(*) cnt
FROM
National_Position N
INNER JOIN Candidate C ON N.National_PosID = C.National_PosID
INNER JOIN Vote V ON V.Candidate_ID = C.Candidate_ID
GROUP BY
N.National_PosID,
N.Title,
C.First_Name,
C.Mid_Name,
C.Last_Name
ORDER BY cnt DESC
FETCH FIRST 1 ROWS ONLY;
在 Mysql(和 Postgres)中,只需将FETCH FIRST 1 ROWS ONLY
替换为LIMIT 1
。
注意:隐式连接很久以前就已经失宠了。 始终使用显式连接。 我已相应地修改了您的查询。
SELECT *
FROM (
SELECT
N.National_PosID,
N.Title,
C.First_Name,
C.Mid_Name,
C.Last_Name, count(*) cnt
FROM
National_Position N
INNER JOIN Candidate C ON N.National_PosID = C.National_PosID
INNER JOIN Vote V ON V.Candidate_ID = C.Candidate_ID
GROUP BY
N.National_PosID,
N.Title,
C.First_Name,
C.Mid_Name,
C.Last_Name
ORDER BY cnt DESC
) x
WHERE ROWNUM = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.