Cara bermain Rekap Kasir
- Baca instruksi level. Arena menampilkan isi tabel
struk, keranjang kelompoknya, lalu hasil query-mu dan hasil yang dicari (putus-putus). - Ketik query di editor. Struk yang dibuang
WHEREmemudar dan tidak masuk keranjang. Tiap keranjang menampilkan nomor struk di dalamnya dan nilai agregatnya. - Keranjang yang tidak lolos
HAVINGtetap digambar, tapi putus-putus dan pudar, supaya kelihatan bahwaHAVINGmenyaring sesudah dihitung. - Tekan Cek jawaban atau Ctrl + Enter. Yang dicek isi hasilnya, termasuk nama kolom, jadi nama dari
ASharus sama dengan yang diminta. Urutan baris tidak dinilai. - Kalau buntu, buka Petunjuk. Level yang sudah selesai tetap tercentang di browser yang sama.
Yang kamu pelajari
- Level 1
COUNT(*)
Menghitung baris. Hasilnya satu baris saja.
- Level 2
SUM
Menjumlahkan isi kolom angka.
- Level 3
MIN, MAX, dan AS
Nilai terkecil dan terbesar, diberi nama kolom hasil dengan
AS. - Level 4
AVG
Rata-rata: jumlah dibagi banyaknya nilai.
- Level 5
COUNT(kolom)
Menghitung isi kolom yang tidak NULL, beda dengan
COUNT(*). - Level 6
GROUP BY
Membagi baris ke kelompok. Fungsi agregat dihitung per kelompok.
- Level 8
WHERE sebelum GROUP BY
Menyaring baris satu per satu sebelum dikelompokkan.
- Level 9
HAVING
Menyaring kelompok sesudah dihitung, boleh memakai fungsi agregat.
- Level 11
GROUP BY dua kolom
Tiap pasangan nilai jadi satu kelompok.
WHERE untuk baris, HAVING untuk kelompok
SQL mengerjakan query bertahap: FROM, lalu WHERE per baris, lalu GROUP BY membuat kelompok, lalu fungsi agregat dihitung, lalu HAVING per kelompok, baru SELECT dan ORDER BY.
Karena itu WHERE SUM(total) > 100000 ditolak: saat WHERE jalan, kelompoknya belum ada dan SUM belum dihitung. Syarat seperti kategori = 'makanan' cocok di WHERE, sedangkan SUM(total) > 100000 harus di HAVING.
Tanya jawab
Apakah harus daftar akun untuk bermain?
Tidak. Semua level bisa dimainkan tanpa akun. Kemajuanmu disimpan di browser yang kamu pakai, jadi akan hilang kalau data browser dihapus.
Apakah query-nya dijalankan di database sungguhan?
Tidak. Query diurai dan dijalankan oleh mesin SQL kecil di browser dengan data contoh, jadi tidak ada data yang bisa rusak.
Kenapa kolom di SELECT harus ikut GROUP BY?
Satu baris hasil mewakili satu kelompok yang berisi banyak struk. Kolom yang nilainya sama di semua struk kelompok itu (kolom di GROUP BY) bisa ditampilkan. Kolom lain harus dirangkum dengan fungsi seperti COUNT atau SUM. Game ini menolak seperti PostgreSQL. MySQL lama kadang menerimanya dan mengambil nilai acak dari kelompok.
Bolehkah alias dari AS dipakai di HAVING?
Di game ini boleh, seperti MySQL dan SQLite, jadi HAVING omzet > 100000 sama dengan HAVING SUM(total) > 100000. PostgreSQL tidak menerimanya, jadi menulis ulang SUM(total) lebih aman kalau kamu berpindah database.
Kenapa AVG dibulatkan?
Supaya mudah dibaca, rata-rata di game ini dibulatkan dua angka di belakang koma. Database sungguhan biasanya menampilkan lebih banyak angka.