2013-04-04 6 views
1

У меня есть таблица следующимИспользование GroupBy в GroupBy

user_id HouseNo  Name location_id 
1  0-0  aaa 1 
2  0-0  bbb 1 
3  0-1  ccc 1 
4  1-2  ddd 1 
5  2-1  eee 1 
6  1-2  fff 1 
7  2-1  ggg 1 
8  1-2  hhh 1 
9  2-1  iii 1 
10 3-0  jjj 1 
11 3-0  kkk 1 
12 3-0  lll 1 

У меня есть 2 вопроса здесь

1) Я не нужно, чтобы получить не пользователей по домашним no.For, что я использовал выберите house_no, count (user_id) из группы пользователей house_no;

Тогда я получил результат

house_no count(house_no) 
    0-0  2 
    0-1  1 
    1-2  3 
    2-1  3 
    3-0  3 

Это нормально для меня. не

Но мой вопрос не в том, как я могу получить не из семей, которая имеет подсчитывать 1 и нет семей, который имеет кол-2 ......

Like as follows: 


count1 1 
count2 1 
count3 3 

Здесь count1 отнюдь не из семей, имеющих одну пользователь, count2 означает не семей, имеющих двух пользователей ......

у меня 3 фиксированные условия here.They учитываются < = 3 число> 4 и Количество < 10 Количество> 10

Мне нужен результат, как следующий

count1 count2 count3 
1   1  3 

ПРИМЕЧАНИЯ: Здесь же семья означает пользователь, содержащие же houseno. Пожалуйста, помогите мне ... Спасибо заранее ....

ответ

1

Нижеприведенный запрос состоит из двух частей, первая часть - это подзапрос, который вычисляет количество элементов на House_No. Результат подзапроса затем вычисляется снова, и на этот раз он будет группироваться как число членов.

SELECT CONCAT('COUNT', totalMember) FamilyMember, COUNT(*) NumberOfFamilies 
FROM 
     (
      SELECT House_No, COUNT(*) totalMember 
      FROM TableName 
      GROUP BY House_no 
     ) x 
GROUP BY totalMember 
ORDER BY totalMember 

ВЫВОД

╔══════════════╦══════════════════╗ 
║ FAMILYMEMBER ║ NUMBEROFFAMILIES ║ 
╠══════════════╬══════════════════╣ 
║ COUNT1  ║    1 ║ 
║ COUNT2  ║    1 ║ 
║ COUNT3  ║    3 ║ 
╚══════════════╩══════════════════╝ 
0

Перечислять семьям с N, вы можете использовать HAVINGGROUP BY модификаторы.

Для семей с 1 члена:

SELECT Name, count(*) as c FROM Tablename GROUP BY Name HAVING c=1; 

Для семей с 2-х участников:

SELECT Name, count(*) as c FROM Tablename GROUP BY Name HAVING c=2; 

и т.д.

+0

мне нужно в одном запросе – PSR

Смежные вопросы