我有一个问题,从我的查询中获得正确计算的值...我有三张table:
表匹配:
| id| idEvent|地位|
| - -----|- -----|- -----|
| 一个|六|已完成|
| 2|六|已完成|
| 3|六|已完成|
第二桌玩家:
| idMatch| idPlayer|聚会|
| - -----|- -----|- -----|
| 一个|三十二|“0”|
| 一个|五十三|“0”|
| 一个|五十五|“一”|
| 一个|五十六|“一”|
| 2|八|“0”|
| 2|五十二|“0”|
| 2|五十四|“一”|
| 2|五十七|“一”|
| 3|八|“0”|
| 3|三十二|“0”|
| 3|五十四|“一”|
| 3|五十五|“一”|
表集:
| idMatch|指数|partySetWon|
| - -----|- -----|- -----|
| 一个|一个|“0”|
| 一个|2|“一”|
| 一个|3|“0”|
| 2|一个|“一”|
| 2| 2|“一”|
| 3|一个|“一”|
| 3| 2|“0”|
| 3| 3|“一”|
下面的查询抛出下面的输出:
SELECT
`match2player`.`idPlayer` AS 'Player',
COUNT(DISTINCT `match`.`id`) AS 'Matches played',
SUM(IF(`match2player`.`party`=
(SELECT set1.`partySetWon` FROM `tennisdb`.`set` set1 WHERE set1.`idMatch` = `set`.`idMatch` GROUP BY set1.`partySetWon` ORDER BY COUNT(set1.`partySetWon`) DESC LIMIT 1)
,1,0)) AS 'Matches Won',
SUM(IF(`match2player`.`party`=`set`.`partySetWon`, 1, 0)) AS 'Sets Won',
SUM(IF(`match2player`.`party`<>`set`.`partySetWon`, 1, 0)) AS 'Sets lost'
FROM `tennisdb`.`set`
LEFT JOIN `tennisdb`.`match` ON `match`.`id` = `set`.`idMatch`
LEFT JOIN `tennisdb`.`match2player` ON `match2player`.`idMatch` = `set`.`idMatch`
WHERE `match`.`idEvent` = 6 AND `match`.`status` IN ('completed','awarded')
GROUP BY `match2player`.`idPlayer`
ORDER BY Player;
Player,"Matches played","Matches Won","Sets Won","Sets lost"
8,2,0,1,4
32,2,3,3,3
52,1,0,0,2
53,1,3,2,1
54,2,5,4,1
55,2,3,3,3
56,1,0,1,2
57,1,2,2,0
“赢得的比赛”一栏给出了错误的值(太高),我不知道如何解决...我玩了进一步的分组,窗口等,没有提供预期的结果......
预选赛将确定哪一方赢得了大多数盘,并导致比赛。当我在比赛中处于顶级小组时,这很好用(不仅仅是球员)。但我不是在寻找一个细分的个别比赛,我想得到的统计超过所有比赛...
1条答案
按热度按时间s5a0g9ez1#
分析内部查询中的匹配项,然后对集合求和,匹配项获胜和失败:
dbfiddle demo