我在项目表中有这样的数据
Tabel siswa Tabel jurusan Tabel Penjurusan
id_siswa nama nilai tes id_jurusan id_jurusan nama id id_siswa id_jurusan option ket
1 A 6 01 01 Sipil 1 1 01 1 lULUS
2 B 7 02 02 Mesin 2 1 02 2 TIDAK LULUS
3 C 8 01 03 Sastra 3 1 03 3 TIDAK LULUS
4 D 6 03 4 2 01 1 LULUS
5 E 7 02 5 2 02 2 TIDAK LULUS
6 2 03 3 TIDAK LULUS
我有这样的查询
SELECT nama_jurusan, nama_lengkap AS NAMA, nilai_tes FROM siswa, penjurusan, jurusan
WHERE siswa.kode = penjurusan.kode AND jurusan.id_jurusan = penjurusan.id_jurusan AND penjurusan.keterangan = "LULUS"
GROUP BY nama_jurusan
ORDER BY nilai_tes ASC
,结果必须是
nama nama_jurusan nilai_tes
B Sipil 7
A Sipil 6
但我的查询无法选择最多2条记录,只能选择最多1条记录。
你可以帮我解决这个问题吗? 谢谢。答案 0 :(得分:1)
听起来你不想使用GROUP BY
,而是LIMIT
:
SELECT nama_jurusan, nama_lengkap AS NAMA, nilai_tes
FROM siswa s
INNER JOIN penjurusan p ON s.kode = p.kode
INNER JOIN jurusan j ON j.id_jurusan = p.id_jurusan
WHERE p.keterangan = 'LULUS'
ORDER BY nilai_tes ASC
LIMIT 2
根据您所需的结果,您可能需要使用DESC
代替ASC
。另请注意使用INNER JOIN
语法。
根据您的意见,您希望每组有两条记录。您可以使用row_number
创建自己的IF
,然后使用它来获得每组前两名。
SELECT *
FROM (
SELECT nama_jurusan,
nama_lengkap AS NAMA,
nilai_tes,
@rn:=IF(@prevjurusan=nama_jurusan,@rn+1,1) as rn,
@prevjurusan:=nama_jurusuan
FROM siswa s
INNER JOIN penjurusan p ON s.kode = p.kode
INNER JOIN jurusan j ON j.id_jurusan = p.id_jurusan
CROSS JOIN (select @rn:= 0, @prevjurusan:='') t
WHERE p.keterangan = 'LULUS'
ORDER BY nama_jurusan, nilai_tes
) y
WHERE rn <= 2
答案 1 :(得分:0)
你正在使用一个带有Value =&#34; LULUS&#34;的AND运算符,而且只有一个! 改变你的状况