SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.07.2016 11:09:16

asker
Участник
Зарегистрирован: 19.10.2011
Сообщений: 11

Как сделать группировку внутри группировки ?

Есть таблица клиенты, нужно выбрать клиентов по странам, штатам и городам
Пробывал так:
SELECT country, COUNT(country), state, COUNT(state), city, COUNT(city)  FROM customers GROUP BY country, state, city;

но результат выводится очень странный, как будто что без группировки,

country       COUNT(country)  state          count(state)  city               count(city) 
------------  --------------  -------------  ------------  -----------------  -------------
Australia                  1  NSW                       1  Chatswood                      1
Australia                  1  NSW                       1  North Sydney                   1
Australia                  1  Queensland                1  South Brisbane                 1
Australia                  1  Victoria                  1  Glen Waverly                   1
Australia                  1  Victoria                  1  Melbourne                      1
Austria                    1  (NULL)                    0  Graz                           1
Austria                    1  (NULL)                    0  Salzburg                       1
Belgium                    1  (NULL)                    0  Bruxelles                      1
Belgium                    1  (NULL)                    0  Charleroi                      1

Отредактированно asker (17.07.2016 13:52:32)

Неактивен

 

#2 17.07.2016 14:26:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как сделать группировку внутри группировки ?

SELECT t1.country, c1, t2.state c2 t3.city, c3 FROM
(SELECT country, COUNT(*) c1 FROM customers GROUP BY country) t1
LEFT JOIN
(SELECT country, state, COUNT(*) c2 FROM customers GROUP BY state) t2 ON t1.country=t2.country
LEFT JOIN
(SELECT country, state, city, COUNT(*) c3  FROM customers GROUP BY city) t3 ON t1.country=t3.country AND (t2.state=t3.state OR (t2.state is null AND t3.state is null));

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson