使用GROUP BY和附加子句

时间:2017-06-12 23:32:45

标签: mysql sql aggregate-functions

我的结构表:

Structure Table

我想搜索每个siswa,每个mapel和每个ranah的平均分数,但只是为了komponen = PR,tugas,ulangan。

我试过了:

    SELECT `nama_siswa`, `mapel`, avg(nilai) FROM nilai_coba 
GROUP BY `nama_siswa`, `mapel`, `ranah`, `komponen`='pr' AND 'tugas' AND 'ulangan'

但是UTS和UAS komponen的值也计入平均值。

Excel screenshot

在这里(红色圆圈),平均值为79.09。根据PR,tugas,ulangan,UTS和UAS计算。对于Ana in mapel PKN应该是76,7。蓝色圆圈是我的Excel数据,其中NH =(xPR + xTugas + xUH)/ 3

我也试过使用过,但我猜它仍然不正确。 那么,我如何在Pkn中获得ana的平均值是76,7?

如果我无法清楚地说出我的问题,我希望Excel屏幕截图可以提供帮助:(

1 个答案:

答案 0 :(得分:0)

无论您使用何种数据库,这都应该是查询的开始:

SELECT komponen, AVG(nilai) AS nilai_average
FROM nilai_coba 
WHERE komponen IN ('pr', 'tugas', 'ulangan')
GROUP BY komponen
ORDER BY komponen

这将显示那些komponen的平均分数。如果您使用以下查询:

SELECT komponen, nama_siswa, mapel, ranah, AVG(nilai) AS nilai_average
FROM nilai_coba 
WHERE komponen IN ('pr', 'tugas', 'ulangan')
GROUP BY komponen, nama_siswa, mapel, ranah
ORDER BY komponen

然后你会看到所有这些字段的平均值被分解。

<强>更新

根据您添加的Excel电子表格,这应该可以获得NH:

SELECT nama_siswa, mapel, AVG(nilai) AS nilai_average
FROM nilai_coba
WHERE komponen IN ('pr', 'tugas', 'ulangan')
GROUP BY nama_siswa, mapel
ORDER BY nama_siswa, mapel

我假设对于NH,你不希望这些值除以3,但你实际上想要平均值。请注意,此方法只能为每个独特的nama_siswa和mapel获取NH。如果您希望SQL查询为您提供格式化为Excel电子表格的结果,则应该查看PIVOT函数。