Как получить количество и группировать по стране в группе по SQL-запросу - PullRequest
0 голосов
/ 02 мая 2018

У меня есть таблица с такими данными:

Id | Country | Desktop_User | Mobile_User
------------------------------------------
1  | USA     | True          | False
2  | Brazil  | False         |            
3  | Mexico  |               | True
4  | India   | True          | True
5  |         | False         | True

Я хотел бы получить данные о типе отчета, в которых я могу получить общее число для группы ВСЕХ «Desktop_User» ИСТИНА и ВСЕХ «Mobile_User» по странам (учитывая, что некоторые записи могут иметь значение 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

Я бы хотел, чтобы данные сортировались по странам в алфавитном порядке - возможно ли это

Пока что я создал этот запрос (ниже), но я думаю, что моя логика неверна в получении всех TRUES для пользователей настольных и мобильных компьютеров и значений 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

1 Ответ

0 голосов
/ 02 мая 2018

Попробуйте следующее:

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 не нужен при группировке.

...