Zde potřebujete mírně propracovaný SQL dotaz. Bude sestávat z dílčích dotazů.
První je toto (fiddle ). Získáte celkový počet položek otevřených dveří pro každé jméno.
SELECT COUNT(*) total, name FROM stats GROUP BY name
Další je toto (fiddle ). Získáte počet otevření na dveře a jméno.
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
Třetí (fiddle ) zahrnuje druhý a pro každé jméno vám poskytne jeden řádek, který ukazuje otevření dveří.
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
Nakonec potřebujete JOIN ke spojení těchto dílčích dotazů v tomto formuláři.
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
Všechno to vypadá takto (fiddle
). Vložíte to do svého sql
variabilní a můžete jít. Je to jen víceřádkový řetězec.
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}
Existuje tedy dotaz vytvořený z hromady vnořených dotazů.
Zde je několik triků, které se můžete naučit, až se budete zlepšovat v analýze dat SQL.
- použití
GROUP BY
- vnoření dotazů, známé také jako poddotazy. Poddotazy si můžete představit jako virtuální tabulky.
- (pokročilé)
GROUP_CONCAT
.