Yang Anda butuhkan di sini adalah kueri SQL yang sedikit rumit. Ini akan terdiri dari subkueri.
Yang pertama adalah ini (biola ). Ini memberi Anda jumlah total item pembuka pintu untuk setiap nama.
SELECT COUNT(*) total, name FROM stats GROUP BY name
Yang berikutnya adalah ini (biola ). Ini memberi Anda jumlah bukaan per pintu dan nama.
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
Yang ketiga (biola ) menggabungkan yang kedua, dan memberi Anda satu baris untuk setiap nama, menunjukkan pintu terbuka.
SELECT name,
GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
FROM ( SELECT COUNT(*) bydoor,
name,
door
FROM stats
GROUP BY name, door
) s
GROUP BY name
Terakhir, Anda memerlukan JOIN untuk mengikat subkueri tersebut bersama-sama, dari formulir ini.
SELECT t.name, t.total, d.details
FROM ( .... the first subquery ....) t
JOIN ( .... the second subquery .... ) d ON t.name = d.name
ORDER BY t.total DESC, t.name
Semua dijabarkan terlihat seperti ini (biola
). Anda memasukkannya ke dalam sql
variabel dan Anda siap melakukannya. Ini hanya string multiline.
set sql {SELECT t.name, t.total, d.details
FROM (SELECT COUNT(*) total, name FROM stats GROUP BY name) t
JOIN ( SELECT name,
GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
FROM ( SELECT COUNT(*) bydoor,
name,
door
FROM stats
GROUP BY name, door
) s
GROUP BY name
) d ON t.name = d.name
ORDER BY t.total DESC, t.name}
Jadi ada kueri yang dibuat dari sekumpulan kueri bersarang.
Ada beberapa trik di sini untuk Anda pelajari saat Anda menjadi lebih baik dalam analisis data SQL.
- penggunaan
GROUP BY
- pengumpulan kueri, juga dikenal sebagai subkueri. Anda dapat menganggap subkueri sebagai tabel virtual.
- (lanjutan)
GROUP_CONCAT
.