2013-04-04 1 views
0

У меня есть 2 запросов, чтобы получить количество семей, имеющих счета = 1 и подсчитывают = 2.Использование нескольких группы при наличии в одном запросе

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


SELECT Name, count(*) as c FROM Tablename GROUP BY HOUSE_NO HAVING c>=2 and c<=4; 

Но мне нужно, чтобы объединить эти запросы в одну query.Like

  count1       count2 
    nooffamiliesHavingcount = 1  nooffamiliesHavingcount = 2 

Пожалуйста, помогите мне .... Спасибо заранее ..

ответ

2

Вы должны поместить свой первый счет в подзапрос:

SELECT COUNT(CASE WHEN C = 1 THEN 1 END) AS nooffamiliesHavingcount1, 
     COUNT(CASE WHEN C = 2 THEN 1 END) AS nooffamiliesHavingcount2 
FROM ( SELECT COUNT(*) AS C 
      FROM TableName 
      GROUP BY House_No 
     ) t 
WHERE c IN (1, 2); 

EDIT

Если вам нужно сделать диапазоны в вашем счете вы можете использовать это:

SELECT COUNT(CASE WHEN C <= 1 THEN 1 END) AS nooffamiliesHavingcount1, 
     COUNT(CASE WHEN C BETWEEN 2 AND 4 THEN 1 END) AS nooffamiliesHavingcount2, 
     COUNT(CASE WHEN C > 4 THEN 1 END) AS nooffamiliesHavingcount3 
FROM ( SELECT COUNT(*) AS C 
      FROM TableName 
      GROUP BY House_No 
     ) t 

Example on SQL Fiddle

+0

can i укажите здесь условие. Это в IN – PSR

+0

здесь, например, i указано 1 и 2. – PSR

+0

, но у меня есть такие условия, как <=1 , > = 2 и <= 10, above10. – PSR

2
SELECT CASE WHEN c <= 1 THEN "<=1" 
      WHEN c BETWEEN 2 and 4 THEN "2-4" 
     END familysize, 
     COUNT(*) nooffamilies 
FROM (SELECT Name, count(*) c 
     FROM Tablename 
     GROUP BY Name) x 
GROUP BY familysize 
HAVING familysize IS NOT NULL 

FIDDLE

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