SQL SERIES
Eps 1 — Most Profitable Company
stratascratch
Kemampuan querying menjadi kebutuhan utama pada pekerjaan berbasis data. Selain leetcode, ada satu lagi web yang bisa menjadi tempat mengasah skill ini, yaitu stratascratch.
Saya terpikir untuk membahas konsep berpikir dalam mengerjakan query ini. Sekedar aktivitas #justforfun untuk menjadi teman bagi para beginner yang sedang tertarik mempelajari SQL.
Dimulai dari episode 1, saya mengambil studi kasus sebagai berikut.
Kita diminta untuk mencari company (perusahaan) dengan profit (keuntungan) terbesar dengan menyertakan lokasi continent (benua). Dengan demikian, kolom yang perlu minimal kita sediakan adalah company, continent, total_profit.
Konsep dasar SQL secara umum adalah SELECT * FROM tabel, dimana SELECT menyatakan kolom yang ingin ditampilkan dan diambil dari tabel yang mana.
Pada kasus ini, kita dapat menuliskan terlebih dahulu kolom company dan continent, serta menambahkan jumlah profits (SUM(profits)). Agregasi SUM dimaksudkan untuk mengantisipasi bila ada perusahan dan continent yang sejenis (duplikasi row), sehingga kita hanya akan menghitung totalnya saja.
SELECT company, continent, SUM(profits) total_profit
FROM forbes_global_2010_2014
Karena terdapat query agregasi berupa SUM, maka perlu ditambahkan fungsi GROUP BY company, continent. Sebagai catatan, kolom yang perlu di GROUP BY adalah kolom selain kolom agregasi. Selanjutnya, query-nya menjadi berikut.
SELECT company, continent, SUM(profits) total_profit
FROM forbes_global_2010_2014
GROUP BY 1,2
Query di atas akan menghasilkan output beberapa baris, karena menampilkan seluruh company dan continent dengan total profit nya masing-masing. Padahal sesuai studi kasus di atas, output yang diharapkan hanya terdiri dari 1 baris saja, yaitu company dan continent dengan profit tertingi. Maka diperlukan tambahan fungsi ORDER BY SUM(profits) DESC dan LIMIT 1. ORDER BY SUM(profits) DESC bertujuan untuk mengurutkan company dan continent dengan profit tertinggi ke terendah. Sedangkan LIMIT 1 membatasi tampilan baris hanya 1 saja, yaitu row dengan company dan continent yang memiliki profit tertinggi.
SELECT company, continent, SUM(profits) total_profit
FROM forbes_global_2010_2014
GROUP BY 1,2
ORDER BY 3 desc
LIMIT 1
Begitulah sekiranya untuk konsep berpikir query pada studi kasus kali ini. Penjelasan yang cukup detail ini semoga dapat menemani teman-teman beginner untuk mempelajari SQL secara menyenangkan.
Cheers.