简体   繁体   English

SQL Select 最大计数嵌套?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM