多层分组查询

一道看似简单的数据库的面试题

建一个如下图的数据库:

巴拉巴拉一顿描述,目的让你求出如下的结果:

解法一:(分组查询,使用max函数)

SELECT
    user_id,
    max(case status when '上班' then time  end) '上班时间',
    max(case status when '下班' then time  end) '下班时间'
FROM    work_time
GROUP BY user_id;

解法二:(表的自连接)

SELECT
    DISTINCT w.user_id,w.time as '上班时间',t.time as '下班时间'
FROM    work_time w
INNER JOIN work_time t
ON w.user_id = t.user_id
AND w.time<t.time

建表sql语句

CREATE TABLE work_time(
    id INT PRIMARY KEY,
    time date,
    status CHAR(20) ,
    user_id INT(20)  
)

插入数据:

INSERT INTO
    work_time(id,time,status,user_id)
VALUES
    ('1','2018-07-01','上班','1'),

 ('2','2018-07-02','下班','1'),

 ('3','2018-07-03','上班','2'),

 ('4','2018-07-04','下班','2')

猜你喜欢

转载自www.cnblogs.com/syd-fish-cat/p/9276539.html