如何通过 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。