Was Sie hier brauchen, ist eine etwas aufwändigere SQL-Abfrage. Es wird aus Unterabfragen bestehen.
Die erste ist diese (fiddle ). ). Sie erhalten die Gesamtzahl der Tür-offenen-Elemente für jeden Namen.
SELECT COUNT(*) total, name FROM stats GROUP BY name
Das nächste ist das (fiddle ). ). Sie erhalten die Anzahl der Öffnungen pro Tür und Name.
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
Die dritte (fiddle ) integriert die zweite und gibt Ihnen eine Zeile für jeden Namen, die zeigt, dass sich die Tür öffnet.
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
Schließlich benötigen Sie einen JOIN in dieser Form, um diese Unterabfragen miteinander zu verbinden.
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
Ausgeschrieben sieht es so aus (fiddle
). Sie fügen es in Ihr sql
ein variabel und schon kann es losgehen. Es ist nur ein mehrzeiliger String.
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}
Es gibt also eine Abfrage, die aus einer Reihe verschachtelter Abfragen besteht.
Hier sind einige Tricks, die Sie lernen können, wenn Sie in der SQL-Datenanalyse besser werden.
- Verwendung von
GROUP BY
- Verschachtelung von Abfragen, auch Unterabfragen genannt. Sie können sich Unterabfragen als virtuelle Tabellen vorstellen.
- (erweitert)
GROUP_CONCAT
.