Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL选择最大嵌套计数?_Mysql_Sql_Max_Where Clause - Fatal编程技术网

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