在groupby中使用groupby

时间:2013-04-04 08:23:17

标签: mysql sql

我有一张表如下

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

我这里有两个问题

1)我需要得到没有用户的房子号。因为我用过    选择house_no,通过house_no从用户组中计数(user_id);

然后我得到了结果

    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个固定的条件。它们是< = 3 count> 4和   计数< 10 count> 10

我需要如下结果

count1   count2 count3
1         1       3

注意:此处同一系列表示包含相同houseno的用户。   请帮助我...提前致谢....

2 个答案:

答案 0 :(得分: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 ║
╚══════════════╩══════════════════╝

答案 1 :(得分:0)

要列出包含N个成员的家庭,您可以使用HAVING GROUP 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;