Как написать SQL для подсчета количества пользователей мобильных устройств / планшетов / компьютеров? - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть таблица, похожая на

VisitorId   date            deviceType
1           2018-12-11      mobile
2           2018-12-11      mobile
3           2018-12-11      desktop
4           2018-12-11      mobile
1           2018-12-12      desktop
2           2018-12-12      mobile
1           2018-12-20      mobile
2           2018-12-20      tablet
...

В каждой строке записывается информация о новом посетителе.

Я пытаюсь написать запрос для вывода числамобильного / настольного компьютера / планшета на основе даты .Ожидаемый результат должен выглядеть следующим образом:

date        numOfDesktop      numOfTablet      numOfMobile
2018-12-11  1                 0                3
2018-12-12  1                 0                1
2018-12-20  0                 1                1
...

Я написал такой SQL-код, но синтаксис неправильный.

SELECT 
  date,
  COUNT(deviceType= "mobile") As numOfMobile,
  COUNT(deviceType= "desktop") AS numOfDesktop,
  COUNT(deviceType= "tablet") AS numOfTablet
FROM 
  tableName
GROUP BY date
ORDER BY date ASC

У меня нет опыта работы с SQL, может кто-нибудь помочь мне создать рабочий SQL-запрос?

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Вы должны были использовать SUM вместо COUNT, например, когда условие внутри - true, 1 возвращается, а когда - false 0, поэтому суммирование этих значений будет таким, как если бы вы подсчитывали их на основе условия.Вы также должны убедиться, что в датах нет времени.

SELECT 
  DATE(`date`) `date`,
  SUM(deviceType="mobile") As numOfMobile,
  SUM(deviceType="desktop") AS numOfDesktop,
  SUM(deviceType="tablet") AS numOfTablet
FROM 
  tableName
GROUP BY DATE(`date`)
ORDER BY DATE(`date`);

Для использования счетчика сделайте что-то вроде:

SELECT 
  DATE(`date`) `date`,
  COUNT(IF(deviceType="mobile", 1, NULL)) As numOfMobile,
  COUNT(IF(deviceType="desktop", 1, NULL)) AS numOfDesktop,
  COUNT(IF(deviceType="tablet", 1, NULL)) AS numOfTablet
FROM 
  tableName
GROUP BY DATE(`date`)
ORDER BY DATE(`date`);

В этом случае, когда условие ложно, значение NULL равноreturn и функция count не примет это во внимание.

0 голосов
/ 25 декабря 2018

Вы можете попробовать как:

SELECT 
    date,
    sum(deviceType= "desktop") As numOfDesktop,
    sum(deviceType= "tablet") As numOfTablet,
    sum(deviceType = 'mobile') as numOfMobile
FROM 
    tableName
GROUP BY date
ORDER BY date ASC
0 голосов
/ 25 декабря 2018

У вас была правильная идея, хотя, как вы видели, это неверный синтаксис.Вы можете использовать выражение case:

SELECT 
  date,
  COUNT(CASE deviceType WHEN 'mobile' THEN 1 END) As numOfMobile,
  COUNT(CASE deviceType WHEN 'desktop' THEN 1 END) AS numOfDesktop,
  COUNT(CASE deviceType WHEN 'tablet' THEN 1 END) AS numOfTablet
FROM 
  tableName
GROUP BY date
ORDER BY date ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...