[英]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;
The output 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)
The problem is that how do I get the output of the only the max count only.问题是我如何获得唯一最大计数的 output 。 Only outputting the max votes row.
仅输出最大票数行。 This is run on mysql.
这是在 mysql 上运行的。
you can use subquery
to get the max
count
of your original result.您可以使用
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
If you are using Oracle (the way you display the results of your query suggests that), then you can use the FETCH FIRST N ROWS ONLY
syntax to exhibit only the record that has the maximum count.如果您使用的是 Oracle(显示查询结果的方式表明),那么您可以使用
FETCH FIRST N ROWS ONLY
语法来仅显示具有最大计数的记录。 This syntax is available since Oracle 12.1.此语法自 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;
In Mysql (and Postgres), just replace FETCH FIRST 1 ROWS ONLY
with LIMIT 1
.在 Mysql(和 Postgres)中,只需将
FETCH FIRST 1 ROWS ONLY
替换为LIMIT 1
。
Note: implicit joins have fallen out of favor long ago.注意:隐式连接很久以前就已经失宠了。 Always use explicit joins.
始终使用显式连接。 I have modified your query accordingly.
我已相应地修改了您的查询。
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.