0

我有 2 个查询来获取 count = 1 和 count = 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;

但我需要将这些查询组合成单个查询。就像

         count1                          count2
  nooffamiliesHavingcount = 1        nooffamiliesHavingcount = 2

请帮助我..提前谢谢..

4

2 回答 2

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

小提琴

于 2013-04-04T10:02:44.573 回答
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

SQL Fiddle 示例

于 2013-04-04T10:03:43.957 回答