Vad du behöver här är en lite utarbetad SQL-fråga. Den kommer att bestå av underfrågor.
Den första är denna (fiol ). Det ger dig det totala antalet dörröppna föremål för varje namn.
SELECT COUNT(*) total, name FROM stats GROUP BY name
Nästa är den här (fiol ). Det ger dig antalet öppningar per dörr och namn.
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
Den tredje (fiol ) innehåller den andra och ger dig en rad för varje namn, vilket visar att dörren öppnas.
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
Slutligen behöver du en JOIN för att knyta samman dessa underfrågor, i det här formuläret.
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
Allt preciserat ser det ut så här (fiol
). Du lägger in den i din sql
variabel och du är klar. Det är bara en flerradssträng.
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}
Så det finns en fråga som består av ett gäng kapslade frågor.
Det finns några knep här för dig att lära dig när du blir bättre på SQL-dataanalys.
- användning av
GROUP BY
- frågekapsling, även känd som underfrågor. Du kan tänka på delfrågor som virtuella tabeller.
- (avancerat)
GROUP_CONCAT
.