mysql - 单个语句上的多个计数列按不同的用户名分组

标签 mysql sql

刚接触 SQL,在使用特定语句时遇到一些问题。

这是一些示例数据:

date       | username
2016-01-01 | JIM
2016-01-01 | BOB
2016-01-01 | BOB
2016-01-02 | JIM
2016-01-03 | JIM
2016-01-03 | JIM
2016-01-03 | BOB

我想做的是计算每个用户名的每个不同日期,除非我希望每个日期都在其自己的列中,每个用户名的每个日期都有一个单独的计数。

我将通过 PHP 提供每个单独的日期,并希望您可以在单个 SQL 查询中返回下表:

username | 2016-01-01 | 2016-01-02 | 2016-01-03
JIM      | 1          | 1          | 2
BOB      | 2          | 0          | 1

到目前为止,我所能实现的只是日期、用户名和每个用户名每天计数的列表:

SELECT date,
       haulier,
       count(*)
FROM demo
WHERE date >= '2016-01-01' AND
      date <= '2016-01-03'
GROUP BY date,
         haulier

问候

最佳答案

您可以使用条件聚合:

select s.username,
       sum(date = '2016-01-01') as cnt_20060101,
       sum(date = '2016-01-02') as cnt_20060102,
       sum(date = '2016-01-03') as cnt_20060103
from sample s
group by s.username;

如果您不知 Prop 体日期,那么您需要使用动态 SQL。您可以在 Google 上搜索“MySQL 动态数据透视”以查看如何执行此操作的示例。

关于mysql - 单个语句上的多个计数列按不同的用户名分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39052522/

相关文章:

sql - 从 SQL 获取未转义的 JSON

sql - TSQL - 获取当前时间的最后一秒

mysql - 如何在多行的单列中插入值?

sql - 如何从 SQL 结果中提取数值数据

php - MYSQL限制JOIN行数

mysql - 如何使用地址或电话号码关联 parent /子女关系中的帐户?

javascript - 如何正确执行这个mysql查询?

mysql - 使用 GROUP BY、ORDER BY、GROUP_CONCAT 获取最旧的行

java - JDBC:使用流从远程 MySQL 数据库导出/导入 CSV 原始数据(SELECT INTO OUTFILE/LOAD DATA INFILE)

MySQL 将多行中的一行设置为默认值