mysql - 如何编写 SQL 来统计移动/平板/桌面用户的数量?

标签 mysql sql database select count

我有一张 table ,看起来像,

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 查询吗?

最佳答案

您的想法是正确的,尽管如您所见,这不是有效的语法。不过,您可以使用 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

关于mysql - 如何编写 SQL 来统计移动/平板/桌面用户的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53920398/

相关文章:

数据透视表中的 SQL 分组

sql - Ruby on Rails where 关系查询

python - 如何为整个 Tornado Web 应用程序建立与 SQLite 数据库的一个连接?

java - OSGi:如何安全地共享 bundle 之间的连接

php - SQL查询MySQL到JSON

php - Excel 加载到 MySQL - 性能

mysql - 按降序排除重复项的行总和

mysql - Delphi 5,如何从 MySQL 的 tis620 字段中检索数据?

mysql - Django ON UPDATE 外键设置?

javascript - 使用 Javascript 将记录插入数据库!