Sql 分组方式有两列
我试图在子查询中使用GROUPBY编写一个查询,我引用了很多博客,但无法获得所有的值Sql 分组方式有两列,sql,mysqli,group-by,Sql,Mysqli,Group By,我试图在子查询中使用GROUPBY编写一个查询,我引用了很多博客,但无法获得所有的值 ps_id ps_name city_id 2 abc 1 3 xyz 2 4 fer 4 5 bbb
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
我有三张表,下面是这些表的结构
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
宠物主人
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
城市大师
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
city_id city_name
1 Bangalore
2 COIMBATORE
4 MYSORE
Api_条目
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
api_id ps_id otp
1 2 yes
2 3
3 2 yes
4 3 yes
5 4
6 5 yes
7 5 yes
8 5 yes
查询是为了获取特定城市和日期范围内的卖家数量、otp为零的宠物卖家数量、otp为1的宠物卖家数量、otp为2的宠物卖家数量、otp>2的宠物卖家数量
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
通过下面的查询,我可以得到城市,psp和零otp
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
select cm.city_name,
count(ps.ps_id) as PSP,
((select count(ps1.ps_id)
FROM ps_master ps1
WHERE ps1.city = cm.city_id)-
(SELECT count(distinct ps1.ps_id)
from ps_master ps1
INNER JOIN api_entry ae ON ps1.ps_id = ae.ps_id and otp!=''
WHERE ps1.city = cm.city_id and date(timestamp) >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY AND date(timestamp) < curdate())) as zero_psp
from ps_master ps INNER JOIN city_master cm ON ps.city = cm.city_id and cm.city_type = 'IN HOUSE PNS'
group by city_id
请告诉我解决这个问题的方法。
提前感谢这并不难做到,而且你走上了正确的道路。以下是我将使用的:
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
select c.city_name, a.otp, p.ps_name, COUNT(*) nbr
from Api_Entry a
inner join Pet_Seller_Master p on p.ps_id=a.ps_id
inner join City_Master c on p.city_id=c.city_id
group by c.city_name, a.otp, p.ps_name
现在,如果您想获得otp为零的卖家数量,只需应用where条款:
ps_id ps_name city_id
2 abc 1
3 xyz 2
4 fer 4
5 bbb 1
请找个人帮我解决这个问题。谢谢