从表中选择最多2条记录

时间:2014-09-18 02:17:47

标签: mysql sql

我在项目表中有这样的数据

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条记录。

你可以帮我解决这个问题吗?

谢谢。

2 个答案:

答案 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运算符,而且只有一个! 改变你的状况