如何进行sql查询以选择唯一的id并按日期在列中排列它们?

exdqitrt  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(294)

这个问题在这里已经有答案了

如何在mysql中返回pivot表输出(9个答案)
两年前关门了。
所有人!你能帮我做一个sql查询来选择唯一的id,并按日期在2018年1月1日到2018年1月4日的列中排列它们吗?在我的表中,login具有varchar类型。

users

id     login
-----------------
100  04.01.2018
101  01.01.2018
180  02.01.2018
103  03.01.2018
104  02.03.2018
205  03.01.2018
203  05.04.2018

Required view

01.01.2018   02.01.2018   03.01.2018   04.01.2018  
1           1            2             1

我提出这样的问题,但不起作用

SELECT COUNT(DISTINCT id) as '01.01.2018' FROM users
where login = '01.01.2018'
union
SELECT COUNT(DISTINCT id) as '02.01.2018' FROM users
where login = '02.01.2018';
union
SELECT COUNT(DISTINCT id) as '03.01.2018' FROM users
where login = '03.01.2018';
union
SELECT COUNT(DISTINCT id) as '06.04.2018' FROM users
where login = '04.01.2018';

我真的很感激任何帮助和指导!

xmq68pz9

xmq68pz91#

您可以执行条件聚合:

SELECT COUNT(DISTINCT CASE WEHN login = '01.01.2018' THEN id END) AS '01.01.2018',
       COUNT(DISTINCT CASE WEHN login = '02.01.2018' THEN id END) AS '02.01.2018',
       COUNT(DISTINCT CASE WEHN login = '03.01.2018' THEN id END) AS '01.01.2018',
       COUNT(DISTINCT CASE WEHN login = '04.01.2018' THEN id END) AS '01.01.2018'
FROM users;

但是,您所需的输出提示我:

SELECT SUM( login = '01.01.2018' ) AS '01.01.2018',
       SUM( login = '02.01.2018' ) AS '02.01.2018',
       SUM( login = '03.01.2018' ) AS '03.01.2018',
       SUM( login = '04.01.2018' ) AS '04.01.2018'
FROM users;

相关问题