Hvad du har brug for her er en lidt udførlig SQL-forespørgsel. Det vil bestå af underforespørgsler.
Den første er denne (violin ). Det giver dig det samlede antal døråbne genstande for hvert navn.
SELECT COUNT(*) total, name FROM stats GROUP BY name
Den næste er denne (violin ). Det giver dig antallet af åbninger pr. dør og navn.
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
Den tredje (violon ) inkorporerer den anden og får dig en linje for hvert navn, der viser døren-åbner.
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
Endelig har du brug for en JOIN for at binde disse underforespørgsler sammen, af denne form.
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
Alt stavet ser det sådan ud (spille
). Du lægger det ind i din sql
variabel, og du er godt i gang. Det er bare en flerlinjet streng.
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å der er en forespørgsel lavet af en masse indlejrede forespørgsler.
Der er nogle tricks her, som du kan lære, efterhånden som du bliver bedre til SQL-dataanalyse.
- brug af
GROUP BY
- forespørgselsindlejring, også kendt som underforespørgsler. Du kan tænke på underforespørgsler som virtuelle tabeller.
- (avanceret)
GROUP_CONCAT
.