时间:2021-07-01 10:21:17 帮助过:16人阅读
username city
张三 北京
张三 上海
李四 北京
如果只是查询张三和李四各有多少人,可以通过下面语句查询
select username,city,count(*) from user group by username
问:怎样查询在不同城市叫张三和李四的人各有多少个呢?
我希望显示的结果是:
张三 共2人 北京1人 上海1人 ...
李四 共1人 北京1人 上海0人 ...
所以通过通过下面查询是不可行的。这会导致出现重复行,而且也不能统计张三有多少人。
select username,city,count(*) from user group by username,city
张三 1 张三 1 李四 1
我需要的结果是:
张三 2 1 1
李四 1 1 0
==============================================================
下面是我的PHP代码,如果单纯一次查询不能实现,那PHP应怎样写呢?
query($query); $num_rows = $result->num_rows; $num_cols = $result->num_fields; echo '
| '.$cols.' | '; } echo '
有一个user表,表中有两个字段分别是username和city,表中有3条条记录。
username city
张三 北京
张三 上海
李四 北京
如果只是查询张三和李四各有多少人,可以通过下面语句查询
select username,city,count(*) from user group by username
问:怎样查询在不同城市叫张三和李四的人各有多少个呢?
我希望显示的结果是:
张三 共2人 北京1人 上海1人 ...
李四 共1人 北京1人 上海0人 ...
所以通过通过下面查询是不可行的。这会导致出现重复行,而且也不能统计张三有多少人。
select username,city,count(*) from user group by username,city
张三 1 张三 1 李四 1
我需要的结果是:
张三 2 1 1
李四 1 1 0
==============================================================
下面是我的PHP代码,如果单纯一次查询不能实现,那PHP应怎样写呢?
query($query); $num_rows = $result->num_rows; $num_cols = $result->num_fields; echo '
| '.$cols.' | '; } echo '
先执行
select username, city, count(*) from user group by city, username;
搜出来的结果(简写):
[
0 => [
username => name1,
city => city1,
count => 1
],
1 => [
username => name1,
city => city2,
count => 2
],
...
]假设结果保存在$rs变量里,使用php处理一下:
$user = [];
foreach ($rs as $row) {
$name = $row['username'];
$city = $row['city'];
isset($user[$name]['total']) {
$user[$name]['total'] += $row['count'];
} else {
$user[$name]['total'] = $row['count'];
}
$user[$name]['detail'][$city] = $row['count'];
}当然这是按我自己喜欢的结构存的,你也可以修改成你喜欢的结构。出来的结果如下(简写):
[
user1 => [
total => 3,
detail => [
city1 => 1,
city2 => 2,
...
],
...
]
select
username,
count(*),
(select count(*) from user where username = a.username and city = '北京'),
(select count(*) from user where username = a.username and city = '上海')
from user a
group by username
如果城市很多的话,先select username,city,count(*) from user group by username,city查出每个人在每个城市中的人数,然后对结果集进行遍历统计
select username,city,count(*)
from user
group by username
结果是:
张三 共2人 北京1人 上海1人 ...
李四 共1人 北京1人 上海0人 ...
实现代码
select username,count(*) 共几人,sum(case when city='北京' then 1 else 0 end) 北京,sum(case when city='上海' then 1 else 0 end) 上海 from user group by username
如何实现聊天那种分组取最新数据的查询。