我有一个SQL代码可以检索曲棍球队的所有分数,我想设置Limit 3
或<= 3
:
my = cursor_test.execute('''SELECT Next.ClubHome,
CASE
WHEN Next.ClubHome = Result.ClubHome then Result.ScoreHome
WHEN Next.ClubHome = Result.ClubAway then Result.ScoreAway
END as score
FROM NextMatch Next
LEFT JOIN ResultMatch Result ON Next.ClubHome in (Result.ClubHome, Result.ClubAway)
''')
for row in my.fetchall():
print(row)
让我更好地解释这个问题:
1.在NextMatch
表中观察下一场芝加哥、纽约和达拉斯曲棍球比赛:在ClubHome
中提供
下一场比赛
| 俱乐部之家|俱乐部之路|锦标赛|
| - ------|- ------|- ------|
| 芝加哥|明尼苏达州|非霍奇金淋巴瘤|
| 纽约|洛杉矶|非霍奇金淋巴瘤|
| 达拉斯|拉斯维加斯黄金|非霍奇金淋巴瘤|
1.在ResultMatch
表中,我想检索芝加哥、纽约和达拉斯的最后3个总分(ScoreHome
或ScoreAway
)。
芝加哥:2人
芝加哥:0
芝加哥:1人
纽约:2人
纽约:3人
纽约:2人
达拉斯:4人
达拉斯:3人
达拉斯:1人
结果匹配
| 俱乐部之家|俱乐部之路|锦标赛|圆形|得分之家|得分|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 多伦多|芝加哥|非霍奇金淋巴瘤|八个|1个|第二章|
| 纽约|拉斯维加斯|非霍奇金淋巴瘤|八个|第二章|三个|
| 芝加哥|达拉斯|非霍奇金淋巴瘤|七|无|四个|
| 渥太华|纽约|非霍奇金淋巴瘤|七|三个|三个|
| 芝加哥|布法罗萨博|非霍奇金淋巴瘤|六个|1个|无|
| 拉斯维加斯|芝加哥|非霍奇金淋巴瘤|六个|四个|第二章|
| 纽约|达拉斯|非霍奇金淋巴瘤|五个|第二章|三个|
| 达拉斯|布法罗萨博|非霍奇金淋巴瘤|五个|1个|第二章|
以下代码可能对解决方案有用。但是,它仅检索最后3个Scorehome结果(而不是ScoreAway):
x = cursor2.execute('''SELECT ClubHome,
FROM (SELECT NextMatch.ClubHome, NextMatch.ClubAway, ResultMatch.ScoreHome,
ROW_NUMBER() OVER (PARTITION BY NextMatch.ClubHome ORDER BY ResultMatch.ScoreHome DESC) AS rn
FROM NextMatch
INNER JOIN ResultMatch ON NextMatch.ClubHome = ResultMatch.ClubHome) t
WHERE rn <= 3
ORDER BY ClubHome ASC''')
如何修改我的(第一段代码)并添加Limit 3
或<= 3
,以获得我在输出示例中要求的结果?谢谢
1条答案
按热度按时间cclgggtu1#
如果只想在SQL中执行,而不想在Python中过滤结果,可以使用窗口函数ROW_NUMBER:
SQL小键盘:https://www.db-fiddle.com/f/xrLpLwSu783AQHrwD8Fq4t/0