Menampilkan nilai max dengan matakuliah berbeda menggunakan inner join

Saya ada permasalahan query untuk menampilkan nama mahasiswa, nama matakuliah dan nilai. Permasalahannya nama matakuliah tidak sesuai dengan nilainya.

MariaDB [mahasiswa]> select * from tabel_mahasiswa;
+--------------+----------------+
| id_mahasiswa | nama_mahasiswa |
+--------------+----------------+
|         1001 | Panji          |
|         1002 | Mansur         |
|         1003 | Asep           |
+--------------+----------------+
3 rows in set (0.025 sec)

MariaDB [mahasiswa]> select * from tabel_matakuliah;
+---------------+-----------------+
| id_matakuliah | nama_matakuliah |
+---------------+-----------------+
|           101 | Algoritma       |
|           102 | Aljabar Linear  |
|           103 | Struktur Data   |
+---------------+-----------------+
3 rows in set (0.000 sec)

MariaDB [mahasiswa]> select * from tabel_nilai;
+----------+--------------+---------------+-------+
| id_nilai | id_mahasiswa | id_matakuliah | nilai |
+----------+--------------+---------------+-------+
|  1000001 |         1001 |           101 |    85 |
|  1000002 |         1001 |           102 |    75 |
|  1000003 |         1001 |           103 |    70 |
|  1000004 |         1002 |           101 |    69 |
|  1000005 |         1002 |           102 |    55 |
|  1000006 |         1002 |           103 |    90 |
|  1000007 |         1003 |           101 |    73 |
|  1000008 |         1003 |           102 |    81 |
|  1000009 |         1003 |           103 |    61 |
+----------+--------------+---------------+-------+
9 rows in set (0.000 sec)

Input query yang udah saya coba tapi tidak sesuai.

MariaDB [mahasiswa]> select distinct nama_mahasiswa, nama_matakuliah, nilai from tabel_nilai inner join tabel_mahasiswa on tabel_nilai.id_mahasiswa = tabel_mahasiswa.id_mahasiswa join tabel_matakuliah on tabel_nilai.id_matakuliah = tabel_matakuliah.id_matakuliah where nilai =(select max(nilai)from tabel_nilai) group by nama_mahasiswa;
+----------------+-----------------+-------+
| nama_mahasiswa | nama_matakuliah | nilai |
+----------------+-----------------+-------+
| Mansur         | Struktur Data   |    90 |
+----------------+-----------------+-------+

MariaDB [mahasiswa]> select distinct nama_mahasiswa, nama_matakuliah, max(nilai) as nilai from tabel_mahasiswa inner join tabel_nilai on tabel_mahasiswa.id_mahasiswa = tabel_nilai.id_mahasiswa join tabel_matakuliah on tabel_nilai.id_matakuliah = tabel_matakuliah.id_matakuliah group by nama_mahasiswa;
+----------------+-----------------+-------+
| nama_mahasiswa | nama_matakuliah | nilai |
+----------------+-----------------+-------+
| Asep           | Algoritma       |    81 |
| Mansur         | Algoritma       |    90 |
| Panji          | Algoritma       |    85 |
+----------------+-----------------+-------+

Terima kasih untuk jawabannya.

avatar rexor
@rexor

1 Kontribusi 0 Poin

Diperbarui 4 tahun yang lalu

Tanggapan

bolehkah saya meminta file sql nya

atau kamu coba dulu jangan menggunakan max(nilai) langsung ambil nilainya saja

https://github.com/prima18114519/Query-SQL/tree/master/mahasiswa

saya udah coba masih belum bisa mas. terimakasih sebelumnya.

coba share dump datanya gan

1 Jawaban:

Bagaimana jika "group by" nya menggunakan "WITH ROLLUP"

avatar insanz01
@insanz01

90 Kontribusi 56 Poin

Dipost 4 tahun yang lalu

Login untuk ikut Jawaban