Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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-无order by的top结果的子查询_Mysql_Sql_Subquery - Fatal编程技术网

Mysql SQL-无order by的top结果的子查询

Mysql SQL-无order by的top结果的子查询,mysql,sql,subquery,Mysql,Sql,Subquery,(对标题感到抱歉,想不起如何解释) 所以我有一个奥运会数据库,基本布局是有一个包含competitornum、givenname和familyname的竞争对手表(其他列不是必需的),还有一个包含competitornum和place(介于1和8之间)的结果表 我正在尝试获得givenname和familyname以及金牌、银牌和铜牌的总数(位置=1、2或3) 它还需要只显示奖牌数量最多的结果,所有这些都不使用Order By子句… 我之前问过这个问题,但意识到我忘了说一些东西,但在添加粗体部分

(对标题感到抱歉,想不起如何解释)

所以我有一个奥运会数据库,基本布局是有一个包含competitornum、givenname和familyname的竞争对手表(其他列不是必需的),还有一个包含competitornum和place(介于1和8之间)的结果表

我正在尝试获得givenname和familyname以及金牌、银牌和铜牌的总数(位置=1、2或3)


它还需要只显示奖牌数量最多的结果,所有这些都不使用Order By子句…

我之前问过这个问题,但意识到我忘了说一些东西,但在添加粗体部分之前,之前的答案是:

SELECT c.Givenname, c.Familyname, COUNT(r.places) AS TotalPlaces
FROM Competitors c INNER JOIN Results r
    ON r.Competitornum = c.Competitornum
WHERE r.place IN (1,2,3)
GROUP BY c.Givenname, c.Familyname
我想它需要另一个子查询,比如

AND TotalPlaces = (SELECT MAX(TotalPlaces))
但我不知道当别名位于子查询上方时,如何在子查询中使用它

感谢您的帮助,谢谢

编辑:关于我任务的正式问题(我想不出答案,我真的试过了,这就是我来这里的原因):

哪位选手获得最多的奖牌(包括金牌、银牌和铜牌)?列出他们的姓名和姓氏以及奖牌总数(仅限)

警告:您的解决方案不能假定竞争对手的名称总是不同的
请勿在此查询的任何部分使用ORDER BY子句。

您需要为该查询使用另一个子查询

SELECT c.Givenname, c.Familyname, COUNT(r.places) AS TotalPlaces
FROM Competitors c 
INNER JOIN Results r ON r.Competitornum = c.Competitornum
WHERE r.place IN (1,2,3)
GROUP BY c.Givenname, c.Familyname
HAVING COUNT(r.places) = 
            (
                SELECT MAX(TotalPlaces)
                FROM
                (
                    SELECT COUNT(g.places) AS TotalPlaces
                    FROM Competitors f 
                    INNER JOIN Results g ON f.Competitornum = g.Competitornum
                    WHERE g.place IN (1,2,3)
                    GROUP BY f.Givenname, f.Familyname
                )
            )

您需要对此进行另一个子查询

SELECT c.Givenname, c.Familyname, COUNT(r.places) AS TotalPlaces
FROM Competitors c 
INNER JOIN Results r ON r.Competitornum = c.Competitornum
WHERE r.place IN (1,2,3)
GROUP BY c.Givenname, c.Familyname
HAVING COUNT(r.places) = 
            (
                SELECT MAX(TotalPlaces)
                FROM
                (
                    SELECT COUNT(g.places) AS TotalPlaces
                    FROM Competitors f 
                    INNER JOIN Results g ON f.Competitornum = g.Competitornum
                    WHERE g.place IN (1,2,3)
                    GROUP BY f.Givenname, f.Familyname
                )
            )
最终答案(感谢吴宇森和lc。) 为将来遇到此问题的任何人粘贴此信息:

SELECT c.Givenname, c.Familyname, COUNT(r.place) AS TotalPlaces
FROM Competitors c 
INNER JOIN Results r ON r.Competitornum = c.Competitornum
WHERE r.place IN (1,2,3)
GROUP BY c.competitornum, c.Givenname, c.Familyname
HAVING COUNT(r.place) = 
            (
                SELECT MAX(TotalPlaces)
                FROM
                (
                    SELECT COUNT(r.place) AS TotalPlaces
                    FROM Competitors c 
                    INNER JOIN Results r ON r.Competitornum = c.Competitornum
                    WHERE r.place IN (1,2,3)
                    GROUP BY c.competitornum, c.Givenname, c.Familyname
                )
            )
最终答案(感谢吴宇森和lc。) 为将来遇到此问题的任何人粘贴此信息:

SELECT c.Givenname, c.Familyname, COUNT(r.place) AS TotalPlaces
FROM Competitors c 
INNER JOIN Results r ON r.Competitornum = c.Competitornum
WHERE r.place IN (1,2,3)
GROUP BY c.competitornum, c.Givenname, c.Familyname
HAVING COUNT(r.place) = 
            (
                SELECT MAX(TotalPlaces)
                FROM
                (
                    SELECT COUNT(r.place) AS TotalPlaces
                    FROM Competitors c 
                    INNER JOIN Results r ON r.Competitornum = c.Competitornum
                    WHERE r.place IN (1,2,3)
                    GROUP BY c.competitornum, c.Givenname, c.Familyname
                )
            )


“所有这些都没有使用Order By条款”??这就像说我想学游泳,但不要把水放在游泳池里!或者……这是家庭作业吗?(如果你确实有很好的理由不使用Order By,你不应该在问题中说明吗?)这是一项任务,我想不出来D:我认为我们不需要Order By子句作为附带提示:“
按c.givename分组,c.Familyname
”和“你的解决方案不能假设竞争对手的名字总是不同的”我希望这并不意味着人们不会给我一个直截了当的答案,特别是如果我不能从他们的提示中得出答案的话。D:另外,我没有添加组,我想我在回答后告诉了那个人。(感谢您添加标签,我是新来的:)使用GroupBy是正确的。你必须按名字分组,因为你正在选择它们。但我想你也要用别的东西来分组。保证每个竞争对手都是独一无二的东西,即使名称相同。“所有这些都不使用Order By子句”??这就像说我想学游泳,但不要把水放在游泳池里!或者……这是家庭作业吗?(如果你确实有很好的理由不使用Order By,你不应该在问题中说明吗?)这是一项任务,我想不出来D:我认为我们不需要Order By子句作为附带提示:“
按c.givename分组,c.Familyname
”和“你的解决方案不能假设竞争对手的名字总是不同的”我希望这并不意味着人们不会给我一个直截了当的答案,特别是如果我不能从他们的提示中得出答案的话。D:另外,我没有添加组,我想我在回答后告诉了那个人。(感谢您添加标签,我是新来的:)使用GroupBy是正确的。你必须按名字分组,因为你正在选择它们。但我想你也要用别的东西来分组。保证每个竞争对手都是独一无二的,即使名字是一样的。程序说在最后一组中有一个错误。。。说到这里,既然我们必须假设名称可能是相同的,我们不应该按名称分组吗?为了解决这个问题,我想我可以按竞争对手的名字,吉文娜的名字,家庭的名字分组?但是我不允许在输出中显示competitornum…@CoreyThompson您不必选择要按其分组的内容,因此您可以将competitornum添加到列表中。:。。。GROUP BY子句不应该位于HAVING子句之前吗?@lc。好的,现在我唯一的问题是,程序不会运行查询,因为它说的是“未知令牌组”。。。我不知道为什么它不承认这一点,我看不出有任何问题在它上面。。。(问题是第17行-最后一个GROUP BY)@CoreyThompson您可以通过在select语句中指定它来实现。我认为它出错的原因是因为我在排版上交换了
group by
having
子句。程序说在最后一个group by中有一个错误。。。说到这里,既然我们必须假设名称可能是相同的,我们不应该按名称分组吗?为了解决这个问题,我想我可以按竞争对手的名字,吉文娜的名字,家庭的名字分组?但是我不允许在输出中显示competitornum…@CoreyThompson您不必选择要按其分组的内容,因此您可以将competitornum添加到列表中。:。。。GROUP BY子句不应该位于HAVING子句之前吗?@lc。好的,现在我唯一的问题是,程序不会运行查询,因为它说的是“未知令牌组”。。。我不知道为什么它不承认这一点,我看不出有任何问题在它上面。。。(问题是第17行-最后一个GROUP BY)@CoreyThompson您可以通过在select语句中指定它来实现。我认为它有错误的原因是因为我在排版上交换了
groupby
having
子句。我的答案有什么问题?我的答案有什么问题?