我有3个MySQL(MariaDB)表:
学生:
| 学生标识|姓名|结果标识|
| - -|- -|- -|
| 一个|八堆|三十一个|
| 2个|多摩|三十二个|
| 三个|龙本|三十三个|
主题:
| 主题标识|点数|结果标识|
| - -|- -|- -|
| 一个|九十|三十一个|
| 2个|九十|三十一个|
| 三个|九十|三十一个|
| 一个|八十四人|三十二个|
| 2个|八十五个|三十二个|
| 三个|八十六人|三十二个|
| 一个|八十七人|三十三个|
| 2个|八十九|三十三个|
| 三个|八十八个|三十三个|
平均分数(_S):
| AS标识|平均分数|结果标识|
| - -|- -|- -|
| 一个|九十|三十一个|
| 2个|八十五个|三十二个|
| 三个|八十八个|三十三个|
所需表格:
| 姓名|一个|2个|三个|平均分数|
| - -|- -|- -|- -|- -|
| 八堆|九十|九十|九十|九十|
| 龙本|八十七人|八十九|八十八个|八十八个|
| 多摩|八十四人|八十五个|八十六人|八十五个|
我需要通过使用连接和透视来拥有这个视图,但是我不知道如何将连接和透视结合在一起。这是我的JOIN的sql
SELECT
name, subject_id, points, average_score
FROM
Students as stud
JOIN
Average_Score as avr
ON
stud.result_id = avr.result_id
JOIN
Subject as subj
ON
avr.result_id = subj.result_id
ORDER BY name
这里是JOIN sql的结果
| 姓名|主题标识|点数|平均分数|
| - -|- -|- -|- -|
| 八堆|一个|九十|九十|
| 八堆|2个|九十|九十|
| 八堆|三个|九十|九十|
| 龙本|一个|八十七人|八十八个|
| 龙本|2个|八十九|八十八个|
| 龙本|三个|八十八个|八十八个|
| 多摩|一个|八十四人|八十五个|
| 多摩|2个|八十五个|八十五个|
| 多摩|三个|八十六人|八十五个|
有没有什么有效的方法来修改我的sql以匹配数据透视表,从而获得所需的视图?
我需要一些帮助,有正确的查询,请。谢谢。
1条答案
按热度按时间vuktfyat1#
您可以尝试使用下列查询:
此解决方案的思想是在
result_id
字段上联接表 Students 和 Subject,然后为每个points
获取与相关的subject_id
对应的列,并使用MAX函数进行聚合以删除NULL值。最后,您可以直接从 Subject 表中的数据进行计算,而不是联接 Average_Points 表。试试看here。