【发布时间】:2019-10-30 08:37:23
【问题描述】:
我有下表:
+------------+-------+
| SchoolName | Marks |
+------------+-------+
| A | 71 |
| A | 71 |
| A | 71 |
| B | 254 |
| B | 135 |
| B | 453 |
| B | 153 |
| C | 453 |
| C | 344 |
| C | 223 |
| B | 453 |
| D | 300 |
| D | 167 |
+------------+-------+
这是按学校名称分组的平均分数:
+------------+------------+
| SchoolName | avg(Marks) |
+------------+------------+
| A | 71.0000 |
| B | 289.6000 |
| C | 340.0000 |
| D | 233.5000 |
+------------+------------+
https://www.db-fiddle.com/f/5t7N3Vx8FSQmwUJgKLqjfK/9
但是,我想计算按学校名称分组的分数的中位数,而不是平均分数。
我正在使用,
SELECT AVG(dd.Marks) as median_val
FROM (
SELECT d.Marks, @rownum:=@rownum+1 as `row_number`, @total_rows:=@rownum
FROM tablename d, (SELECT @rownum:=0) r
WHERE d.Marks is NOT NULL
ORDER BY d.Marks
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );
要计算整个Marks列的平均值,但我不知道如何分别为每个学校做。
【问题讨论】:
-
您使用的是哪个版本的 MySQL?
-
我使用的是 MySQL 8。
-
您能告诉我们您的预期结果吗?
标签: mysql sql average window-functions median