gpt4 book ai didi

mysql - 如何获得sql中某个值的胜率?

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:45 24 4
gpt4 key购买 nike

我的数据库中有 2 个表:一个名为“LEAGUES”,另一个名为“MATCHES”。我想根据与这些联赛相关的比赛的有利结果来获得每个联赛的胜率。

表的结构:

#######################  ###########################
# TABLE LEAGUES # # TABLE MATCHES #
####################### ###########################
+----------+----------+ +-------------------------+
| ID | name | |ID|match|League_id|Result|
+----------+----------+ +--+-----+---------+------+
| 1 | aaa | |1 |xxxxx| 1 | W |
| 2 | bbb | |2 |xxxxx| 1 | L |
| 3 | ccc | |3 |xxxxx| 2 | W |
| 4 | ddd | |4 |xxxxx| 3 | W |
+----------+----------+ |5 |xxxxx| 3 | L |
|6 |xxxxx| 3 | W |
+--+-----+---------+------+

我想要的结果:

#######################
# RESULT #
#######################
+----------+----------+
|league.id | Winrate |
+----------+----------+
| 1 | 50% |
| 2 | 100% |
| 3 | 66% |
+----------+----------+

我尝试了以下代码,但它不起作用,因为子查询返回多个值:

SELECT leagues.id, COUNT(leagues.id)*100/(SELECT COUNT(leagues.id) 
FROM leagues,matches WHERE
leagues.id=matches.League_id
GROUP BY leagues.id) as winrate
FROM leagues,matches
WHERE leagues.id=matches.League_id and matches.result like 'W'
GROUP BY leagues.id

还有其他方法可以得到这些结果吗?提前致谢。

最佳答案

你似乎想要:

SELECT m.League_id,
AVG( m.result = 'W' ) as winrate
FROM matches m
GROUP BY m.League_id;

注意事项:

  • 你不需要 leagues表,因为你需要的字段在matches .
  • 学习适当的、明确的、标准 JOIN语法(尽管对于此查询不是必需的)。
  • MySQL 将 bool 值视为数字上下文中的数字,1 表示真,0 表示假,因此 AVG( <boolean expression> )返回真值的比率。非常漂亮。
  • 尽管他们做的事情几乎相同,=like 相比,更常用于相等比较.

关于mysql - 如何获得sql中某个值的胜率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com