【发布时间】:2019-12-27 00:09:25
【问题描述】:
我得到了一个包含以下数据的数据库表:
id | country | date | rank | sport
--------------------------------------------
1 | UK | 2000-01-30 | 1 | tennis
2 | US | 2000-01-30 | 2 | tennis
3 | UK | 2000-01-30 | 3 | tennis
4 | FR | 2000-01-30 | 4 | tennis
5 | UK | 2000-01-30 | 5 | tennis
6 | NL | 2000-01-30 | 6 | tennis
7 | DE | 2000-01-30 | 1 | golf
8 | ES | 2000-01-30 | 2 | golf
9 | GR | 2000-01-30 | 3 | golf
10 | GR | 2000-01-30 | 4 | golf
11 | ES | 2000-01-30 | 5 | golf
12 | NL | 2000-01-30 | 6 | golf
13 | US | 2000-01-31 | 1 | tennis
14 | FR | 2000-01-31 | 2 | tennis
15 | UK | 2000-01-31 | 3 | tennis
16 | UK | 2000-01-31 | 4 | tennis
17 | FR | 2000-01-31 | 5 | tennis
18 | BE | 2000-01-31 | 6 | tennis
19 | DE | 2000-01-31 | 1 | golf
20 | BE | 2000-01-31 | 2 | golf
21 | ES | 2000-01-31 | 3 | golf
22 | US | 2000-01-31 | 4 | golf
23 | UK | 2000-01-31 | 5 | golf
24 | NL | 2000-01-31 | 6 | golf
等等
期望的输出
我想查看所选国家/地区的以下输出:
- 该国家/地区在所选日期的平均运动排名(所有运动都计算在内,但只有最高排名每项运动。因此,如果英国两次被列为网球(例如第 6 和第 7 位) ,只应采取位置 6))
- 在所选日期为国家/地区排名前 6 位的符号数(仅计算每项运动的最高排名)
- 该国家/地区在所选日期列出的运动数量
因此,例如,英国的结果应如下所示:
UK:
date | avg. rank | amount sports in top 6 rank | sum of highest rank per sport
--------------------------------------------------------------------------------------------
2000-01-30 | 1,0 | 1 | 1
2000-01-31 | 4,0 | 2 | 8
这似乎不太难,但是,我没有设法让它工作。
尝试过的解决方案
我使用以下 mysql 查询:
SELECT
date,
AVG(rank) as avgRank,
COUNT(rank) as numRank,
SUM(rank) as sumRank
FROM `table`
WHERE
country='UK'
GROUP BY date
ORDER BY
date,rank ASC
它几乎可以工作,但是,我有一个小问题。输出如下:
UK:
date | avg. rank (avgRank) | amount sports in top 6 rank (numRank) | sum of highest rank per sport (sumRank)
--------------------------------------------------------------------------------------------
2000-01-30 | 4,5 | 3 | 9
2000-01-31 | 4,0 | 3 | 12
因此,它似乎计算了英国的每一个符号,而不是每天每项运动的最高排名。 如何更改查询以使其正常工作?我尝试将“运动”添加到 GROUP BY 语句中,但结果如下(每项运动一行):
UK:
date | avg. rank | amount sports in top 6 rank | sum of highest rank per sport
--------------------------------------------------------------------------------------------
2000-01-30 | 4,5 | 3 | 9
2000-01-31 | 3,5 | 2 | 7
2000-01-31 | 5,0 | 1 | 5
谁能帮帮我? :)
【问题讨论】:
-
'选择的日期'?
-
你能提供一个输出表吗?意思是最终结果应该是什么样子,因为你的问题包含很多信息。
-
另外,英国似乎在 30 日只有一项资格赛(网球),而在 31 日只有两项(网球和高尔夫)