Mysql 从表中选择最多2条记录

Mysql 从表中选择最多2条记录,mysql,sql,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

我在项目表中有类似的数据

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
结果必然是

但是,我不知道该怎么做

B第7页

一小口6

但我的查询无法选择最大2条记录,只能选择最大1条记录

你能帮我解决这个问题吗


谢谢。

您使用的是Value=LULUS的AND运算符,其中只有一个!
更改您的条件

听起来您不想使用分组方式,而是限制:

根据所需的结果,您可能需要使用DESC而不是ASC。另外,请注意内部连接语法的使用

根据您的评论,您希望每组有两条记录。您可以使用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

我想根据特定字段选择前2名结果。结果必须是nama nama_jurusan nilai_tes B Sipil 7 B Sipil 6您使用的是哪种RDBMS?SQL Server还是MySql?我建议您在连接操作中摒弃老式的逗号语法,改用join关键字;并将连接谓词重新定位到ON子句而不是WHERE子句,无论您使用的是哪个数据库。此外,最佳做法是使用表名或表别名限定所有列引用。但我希望在student have value=lulus中选择值max 2不信任可能不是。我想让不信任的sipil有2个最大值,mesin有2个最大值,sastra有2个最大值。但是用你的代码sipil只有1个最大值。这个怎么样?@user3695958-对不起,我不明白你的问题。。。请创建一个fiddle sqlfiddle.com并向我们展示您得到了什么以及您期望的是什么。也许我的问题与此相同,但我不知道如何在我的表格中实现。您不需要先订购nama_jurusan,然后订购nilai_tes吗?
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