我有一张表如下
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的用户。 请帮助我...提前致谢....
答案 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;
等