Mencari Nilai Maksimum Per Kategori SQL

Salah satu masalah paling umum yang melibatkan query database adalah mencari nilai terbesar/terkecil pada tiap kategori/tipe. Sebagai contoh adalah mencari pencetak gol terbanyak pada masing-masing dari 4 klub teratas sepak bola Liga Inggris berikut ini.

Nama                    Klub           Gol
------------------------------------------
Sergio Agüero           Man City       23
Edin Džeko              Man City       14
Mario Balotelli         Man City       13
Wayne Rooney	        Man United     27
Javier Hernández        Man United     10
Robin Van Persie        Arsenal        30
Emmanuel Adebayor       Tottenham      17
Jermain Defoe           Tottenham      11
Rafael Van der Vaart    Tottenham      11

Berikut ini adalah hasil yang diinginkan.

Nama                    Klub           Gol
------------------------------------------
Robin Van Persie        Arsenal        30
Wayne Rooney	        Man United     27
Sergio Agüero           Man City       23
Emmanuel Adebayor       Tottenham      17

Untuk menghasilkan keluaran seperti di atas, paling tidak kita membutuhkan dua langkah. Mencari jumlah gol yang diinginkan, kemudian tampilkan field lainnya berdasarkan gol yang sudah dicari tadi.

Langkah pertama adalah mencari gol terbanyak pada masing-masing klub tanpa melihat siapa pencetak golnya.

SELECT Klub, MAX(Gol) as maxGol 
FROM `skorer` 
GROUP BY Klub

Klub           maxGol
---------------------
Arsenal        30
Man City       23
Man United     27
Tottenham      17

Hasil bisa berbeda tergantung teknik penyortingan yang digunakan. Pada contoh di atas penyortingan menaik (ascending) berdasarkan field “Klub”.

Langkah kedua adalah menampilkan field sisanya (Nama) dengan cara menggabungkan table hasil query pertama dengan table mula-mula (skorer).

SELECT b.Nama, b.Klub, b.Gol
FROM (
  SELECT Klub, MAX(Gol) AS maxGol
  FROM `skorer` 
  GROUP BY Klub
) AS a
INNER JOIN `skorer` AS b ON 
  a.Klub = b.Klub AND a.maxGol = b.Gol

Nama                    Klub           Gol
------------------------------------------
Sergio Agüero           Man City       23
Wayne Rooney	        Man United     27
Robin Van Persie        Arsenal        30
Emmanuel Adebayor       Tottenham      17

Jika ingin diurutkan sesuai contoh, tinggal tambahkan ORDER BY Gol DESC pada akhir query.

Sebenarnya ada query yang lebih singkat untuk menampilkan hasil seperti di atas, yaitu dengan menggunakan sub-query untuk mencari gol terbanyak pada masing-masing klub.

SELECT * 
FROM `skorer`
WHERE Gol = (
  SELECT MAX(Gol) 
  FROM `skorer` AS a 
  WHERE a.Klub = skorer.Klub
)

Comments

6 responses to “Mencari Nilai Maksimum Per Kategori SQL”

  1. caak ali Avatar
    caak ali

    tutorialnya sangat membantu, terimakasih…
    saya punyak permasalahan hampir sama kayak tutorial diatas tp karna sy masih baru jadi masih banyak errornya.

    saya mau menampilkan jumlah penduduk pada tiap kecamatan dimana data yang muncul berdasarkan bulan terrakhir, sy mempunyai 2 tabel yakni tabel kecamatan,dan wni.

    kecamatan
    idkec | namakec
    1 | A
    2 | B
    3 | C

    wni
    id | idkec | jml | bln | thn
    1 | 1 | 10 | 2 | 2013
    2 | 2 | 8 | 2 | 2013
    3 | 3 | 5 | 2 | 2013
    4 | 1 | 9 | 3 | 2013
    5 | 3 | 7 | 3 | 2013
    6 | 2 | 6 | 4 | 2013

    hasil yang di inginkan
    idkec | namakec | jml | bln | thn
    1 | A | 9 | 3 | 2013
    2 | B | 6 | 4 | 2013
    3 | C | 7 | 3 | 2013

  2. Yenprima Avatar

    Wah, tutorialnya sangat membantu gan buat bikin tugas ane…:D
    Thanks gan, thanks udh sharing…:)

  3. didik Avatar

    makasih banyak tutorialnya..

  4. Hair Styles Avatar

    This is my first time pay a visit at here and i am really pleassant to read all at single place.

  5. Appliance Repair Manual Avatar

    First off I would like to say superb blog! I had a quick question which I’d like to ask if you don’t mind. I was interested to find out how you center yourself and clear your thoughts before writing. http://www.kayswell.com I have had a difficult time clearing my mind in getting my ideas out there.I truly do take pleasure in writing but it just seems like the first 10 to 15 minutes are

  6. Appliance Repair Manual Avatar

    I am really impressed with your writing skills as well as with the layout on your blog. Is this a paid theme or did you modify it yourself? Anyway keep up the nice quality writing, it is rare to see a nice blog like this one nowadays. http://www.kayswell.com

Leave a Reply

Your email address will not be published. Required fields are marked *