Това, от което се нуждаете тук, е леко сложна SQL заявка. Ще се състои от подзаявки.
Първият е този (цигулка ). Той ви дава общия брой отворени врати за всяко име.
SELECT COUNT(*) total, name FROM stats GROUP BY name
Следващият е този (цигулка ). Получава ви броя отваряния на врата и име.
SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door
Третият (цигулка ) включва втория и ви дава един ред за всяко име, показващ отварянето на вратата.
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
И накрая, имате нужда от JOIN, за да свържете тези подзаявки заедно, от тази форма.
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
Всичко изписано, изглежда така (цигулка
). Поставяте го във вашия sql
променлива и сте готови. Това е просто многоредов низ.
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}
Така че има заявка, направена от куп вложени заявки.
Тук има някои трикове, които можете да научите, докато ставате по-добри в анализа на SQL данни.
- използване на
GROUP BY
- вложение на заявки, известно също като подзаявки. Можете да мислите за подзаявките като виртуални таблици.
- (разширено)
GROUP_CONCAT
.