如何通过 sql 查询按国家/地区获取计数和分组
How to get count and group by country in group by sql query
我有一个 table 数据如下:
Id | Country | Desktop_User | Mobile_User
------------------------------------------
1 | USA | True | False
2 | Brazil | False |
3 | Mexico | | True
4 | India | True | True
5 | | False | True
我想要一个报告类型的数据,我可以在其中获取按国家/地区分组的 ALL "Desktop_User" TRUE 和 ALL "Mobile_User" TRUE 的总计数(考虑到某些记录可能对国家或地区具有 NULL 值) Desktop_User 或 Mobile_User 列。类似这样的内容:
Country | Desktop_User | Mobile_User
------------------------------------------
USA | 100 | 49
China | 50 | 10
India | 11 | 5
Brazil | 11 | 0
Mexico | 0 | 0
NO COUNTRY | 5 | 7
我希望数据按国家/地区字母顺序排序 - 可以吗
到目前为止,我已经创建了这个查询(如下),但我认为我的逻辑在为桌面和移动用户获取所有 TRUE 和 NULL 值方面是不正确的
我对数据进行排序的最佳方式是什么?
SELECT DISTINCT Country AS Country,
COUNT(Desktop_User) AS Desktop_User,
COUNT(Mobile_User) AS Mobile_User
FROM Contacts
WHERE Desktop_User = 'True'
OR Mobile_User = 'True'
GROUP BY Country
尝试以下操作:
select Country AS Country
, SUM(case when Desktop_User = 'True' then 1 else 0 end) as Desktop_User_cnt
, SUM(case when Mobile_User = 'True' then 1 else 0 end) as Mobile_User_cnt
FROM Contacts
WHERE ((Desktop_User = 'True') OR (Mobile_User = 'True'))
group by Country
Order by Desktop_User_cnt desc
分组时不需要 DISTINCT。
我有一个 table 数据如下:
Id | Country | Desktop_User | Mobile_User
------------------------------------------
1 | USA | True | False
2 | Brazil | False |
3 | Mexico | | True
4 | India | True | True
5 | | False | True
我想要一个报告类型的数据,我可以在其中获取按国家/地区分组的 ALL "Desktop_User" TRUE 和 ALL "Mobile_User" TRUE 的总计数(考虑到某些记录可能对国家或地区具有 NULL 值) Desktop_User 或 Mobile_User 列。类似这样的内容:
Country | Desktop_User | Mobile_User
------------------------------------------
USA | 100 | 49
China | 50 | 10
India | 11 | 5
Brazil | 11 | 0
Mexico | 0 | 0
NO COUNTRY | 5 | 7
我希望数据按国家/地区字母顺序排序 - 可以吗
到目前为止,我已经创建了这个查询(如下),但我认为我的逻辑在为桌面和移动用户获取所有 TRUE 和 NULL 值方面是不正确的
我对数据进行排序的最佳方式是什么?
SELECT DISTINCT Country AS Country,
COUNT(Desktop_User) AS Desktop_User,
COUNT(Mobile_User) AS Mobile_User
FROM Contacts
WHERE Desktop_User = 'True'
OR Mobile_User = 'True'
GROUP BY Country
尝试以下操作:
select Country AS Country
, SUM(case when Desktop_User = 'True' then 1 else 0 end) as Desktop_User_cnt
, SUM(case when Mobile_User = 'True' then 1 else 0 end) as Mobile_User_cnt
FROM Contacts
WHERE ((Desktop_User = 'True') OR (Mobile_User = 'True'))
group by Country
Order by Desktop_User_cnt desc
分组时不需要 DISTINCT。