SQL深入探讨之分组(Group By)

1、概述

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

2、原始表

1).t_plan表

id
line_no
time
1
1
08:00:00
2 1 09:30:00
3 1 12:00:00
4 2 08:30:00
5 2 10:30:00
6 2 12:30:00
7 3 08:45:00
8 3 11:00:00

2). t_line表

line_no
line_name
1 地铁1号线
2 地铁2号线
3 地铁3号线

3、简单Group By

SELECT line_no,count(time) as time from t_plan GROUP BY line_no

查询每个line_no出现的次数。

4、结合Group By求最值问题

问题描述:求最早的两班地铁和最迟的两班地铁的详细信息,结果如下:

id line_no line_name time
1
1
地铁1号线 08:00:00
4 2 地铁2号线 08:30:00
3 1 地铁1号线 12:00:00
6 2 地铁2号线 12:30:00


咋一看这需求的结果,需要用的应该有limit、MAX、MIN、UNION、join。实现如下:

SELECT * from ((
    SELECT
        p.line_no,
        l.line_name,
        MIN(p.time) AS time
    FROM
        t_plan p
    LEFT JOIN t_line l
    ON p.line_no = l.line_no
    GROUP BY
        p.line_no
    LIMIT 0,2
)
UNION
(
    SELECT
        p.line_no,
        l.line_name,
        MAX(p.time) AS time
    FROM
        t_plan p
    LEFT JOIN t_line l
    ON p.line_no = l.line_no
    GROUP BY
        p.line_no
       ORDER BY time DESC
    LIMIT 0,2
)) b ORDER BY b.time

union前后的语句别忘记加括号,不加括号前面的limit会被优化掉。


你可能感兴趣的:(SQL深入探讨之分组(Group By))