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