Mysql SQL选择最大嵌套计数?
输出Mysql SQL选择最大嵌套计数?,mysql,sql,max,where-clause,Mysql,Sql,Max,Where Clause,输出 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.F
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;
问题是,如何仅获取最大计数的输出。仅输出最大投票数行。这是在mysql上运行的。您可以使用
子查询
获取原始结果的最大值
计数
+------------+------------+----------+-----------+----------+
| 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)
如果您使用的是Oracle(您显示查询结果的方式表明),则可以使用fetchfirstn ROWS ONLY
语法仅显示具有最大计数的记录。此语法自Oracle 12.1开始提供
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
在Mysql(和Postgres)中,只需将仅获取前1行
替换为限制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;
您正在使用哪些RDBMS?请在您的问题中添加相关标签:oracle、sql server、mysql等等?您的预期结果是什么?只有一条记录具有最大计数(此处:Daisy Maddox)?-在ANSI-92 SQL标准中(超过25年前),旧式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的用途是按降序输出行,但mysql不接受where rownum,只获取前1行。它没有这个function@ShengZhang:在Mysql(和Postgres)中,只需将FETCH FIRST 1 ROWS ONLY
替换为LIMIT 1
。是的,我意识到了,但是LIMIT 1只限制第一行的最大计数,但是每个职位都有不同,因为国民分为总统和参议院两个职位,所以需要最多两个职位。@ShengZhang:好的,我想我知道你想要什么了。正如我最初评论的那样,如果你一开始就提供了你的预期结果,那就容易多了。你能告诉我你使用的是哪个版本的mysql吗?版本是5.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