1

我有一张如下表

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)我需要按房屋编号获取用户数。为此,我使用了从用户组中选择房屋编号,计数(用户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 个固定条件。它们是 count<=3 count >4 和 count<10 count >10

我需要如下结果

count1   count2 count3
1         1       3

注意:这里相同的家庭是指包含相同 houseno 的用户。请帮助我......提前谢谢......

4

2 回答 2

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 ║
╚══════════════╩══════════════════╝
于 2013-04-04T08:25:58.407 回答
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;

等等

于 2013-04-04T08:56:57.907 回答