【问题标题】:SELECT COUNT() INSIDE A SELECT MAX() SQL在 SELECT MAX() SQL 中选择 COUNT()
【发布时间】:2021-09-11 11:14:42
【问题描述】:

我在数据库中有一张名为player_mast 的表格(数据只是一个示例),我想找到为 2016 年欧洲杯提供最多球员的俱乐部。

player_id country_id jersey_no player_name posi_to_play dt_of_bir age playing_club
1231 1231 10 Hazard striker 2/3/1991 33 Chelsea

为什么这个查询不起作用?在我看来是对的:

SELECT playing_club, MAX(NumberOfPlayerForTeam)
FROM (
  SELECT playing_club, COUNT(player_id) AS NumberOfPlayerForTeam
  FROM player_mast
  GROUP BY(playing_club))
GROUP BY(playing_club);

【问题讨论】:

  • 查询具体会发生什么?错误的答案?错误信息?如果是后者,显示了什么消息?
  • 要么使用窗口功能。在 MySQL 版本 8 中。或者执行 ORDER BY, LIMIT。
  • 您的查询中没有“2016”或“2016 世界杯”。所以,我认为数据不支持您的查询。
  • 这是一个练习,它是欧元 2016 的分贝,每个表数据都隐含地引用了 EURO 2016。

标签: mysql sql count max


【解决方案1】:

如果您想要表格中行数最多的俱乐部,您可以使用rank()

SELECT pm.*
FROM (SELECT playing_club, COUNT(*) AS NumberOfPlayerForTeam,
             RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum
      FROM player_mast
      GROUP BY playing_club
     ) pm
WHERE seqnum = 1;

注意:

  • COUNT(<column name>) 计算列中非NULL 值的数量。无需进行此额外检查; COUNT(*) 做你想做的事。
  • GROUP BY 键周围不需要括号。

【讨论】:

    【解决方案2】:

    试试这个

    SELECT playing_club, NumberOfPlayerForTeam<br>
    FROM (<br>
      SELECT playing_club, COUNT(player_id) AS NumberOfPlayerForTeam<br>
      FROM player_mast<br>
      GROUP BY(playing_club))<br>
    ORDER BY NumberOfPlayerForTeam DESC LIMIT 1;
    

    【讨论】:

    • 外部选择恕我直言,不需要。您应该能够在 GROUP BY 之后应用 ORDER BY 和 LIMIT。
    • 是的,这也是一种解决方案。但我只想对用户自己的查询进行最小的更改。如果需要,用户可以根据自己的选择进行更改。
    • 是的,但是如果有超过 1 个团队提供最大数量的玩家并且我不知道这个数量的团队,“DESC LIMIT 1”将不会产生 100% 真实的结果或我错了吗?尤其是在经常更改其数据的数据库中,这将是一个问题。
    • ok..如果是这样,那么会有不同的查询。您可以与创建表脚本共享示例数据脚本吗?另外,分享你正在使用的mysql版本。
    • 是的,但这是在浏览器上的 sql 编辑器中进行的练习:w3resource.com/sql-exercises/soccer-database-exercise/…
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多