【问题标题】:How to find min and max of a team based on RANK如何根据排名找到团队的最小值和最大值
【发布时间】:2021-01-11 23:13:48
【问题描述】:

问题: 列出第一名和最后一名的球队以及他们每年的击球次数 什么是 SQL 查询,我如何按年份对排名和分组结果执行 min 和 Max 同一列?

下面是我尝试编写 SQL 的 Teams 表的列

这里解释了列 团队表列

    yearID         Year
    lgID           League
    teamID         Team
    franchID       Franchise (links to TeamsFranchise table)
    divID          Team's division
    Rank           Position in final standings
    AB             At bats

期望的输出

我试图在同一年达到最低和最高等级,但无法弄清楚 如何获得同一列中排名的最小最大值

   Team ID, Year, Rank, At Bats 
   PH1,     1871,  1,    1281
   RC1,     1871,  9,    1036
   LAA,     2014,  1,    5652

样本数据

 yearID lgId    teamID  franchID  divID   Rank    Ab(at-bats)
 '1902', 'AL', 'BOS',   'BOS',     '',    '3',   '4875'
 '1914', 'NL', 'BRO',   'LAD',     '',   '5',   '1386'
 '1925', 'AL', 'CLE',    'CLE',    '',   '6',   '1631'
 '1937', 'NL', 'NY1',    'SFG',    '',    '1',   '1484'

MySql 脚本出现错误

select teamID,yearID,Rank,AB, 
RANK() OVER (PARTITION BY yearID order by Rank DESC) other_rank
from Teams;

错误

   ERROR 1064 (42000): You have an error in your SQL syntax; check the 
   manual that corresponds to your MySQL server version for the right 
   syntax to use near '(PARTITION BY yearID order by Rank DESC) other_
   rank from Teams' at line 1

【问题讨论】:

  • 你能指定任何你可能尝试过的代码吗?
  • 好吧,我尝试的是在 diff 列中给我排名 min 和 max ,这在这里没有多大帮助。我知道该怎么做,但我不知道我们如何才能在排名中做到最低和最高。像 rank over partition 这样的东西在这里不起作用,因为我猜这里已经给出了排名。
  • 请提供一些示例数据以及与该示例数据相关的预期输出。另外,请标记您正在使用的正确数据库。
  • 请不要标记垃圾邮件;删除与您的问题无关的 dbms 标签。
  • @Popeye 使用 mysql ,提供示例数据和所需的输出值可能会有所不同,但如果您看到输出,您会知道我们正在尝试按同一年的排名查找最小值和最大值跨度>

标签: mysql sql


【解决方案1】:

这样的事情可能会起作用:

with max_rank as (
    SELECT yearID, max(Rank) as MaxRank
    from Teams
    Group by yearID
)
SELECT T.*
FROM Teams T
LEFT OUT JOIN max_rank M ON T.yearID = M.yearid AND T.rank = m.MaxRank
WHERE T = 1 OR T.rank = M.MaxRank;

【讨论】:

  • 那么你能向我解释一下最后一行发生了什么,where 子句,比如 T.Rank =1 或 T = 1?
  • 对不起,错字。应该是“WHERE T.rank = 1 OR T.rank = M.MaxRank;”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 2023-03-18
  • 2021-12-31
  • 2012-02-10
  • 2012-09-09
相关资源
最近更新 更多