2013-04-04 47 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); 

编辑

如果你需要做的范围在你的数,您可以使用此:

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 2013-04-04 10:06:24

+0

这里例如我指定了1和2. – PSR 2013-04-04 10:09:01

+0

但我有像<=1 , > = 2和<= 10的条件,高于10。 – PSR 2013-04-04 10:10:04

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