【问题标题】:Group By, IFNULL and Order By date分组依据、IFNULL 和按日期排序
【发布时间】:2021-12-07 08:23:33
【问题描述】:

我必须获取按类型分组的表中的行(如果它们不为空)和用户。按时间订购。但是分组必须分开...

这是我的桌子:

id event_code user time
10 A 6 2021-10-20 09:59:00
9 null 6 2021-10-20 09:56:00
8 null 6 2021-10-20 09:54:00
7 A 6 2021-10-20 09:53:00
6 A 6 2021-10-20 09:52:00
5 null 6 2021-10-20 09:51:00
4 null 4 2021-10-20 09:50:00
3 B 6 2021-10-20 09:49:00
2 B 6 2021-10-20 09:48:00
1 B 12 2021-10-20 09:43:00

我想得到这个:

id event_code user time number
10 A 6 2021-10-20 09:55:00 1
9 null 6 2021-10-20 09:54:00 1
8 null 6 2021-10-20 09:54:00 1
7,6 A 6 2021-10-20 09:53:00 2
5 null 6 2021-10-20 09:51:00 1
4 null 4 2021-10-20 09:50:00 1
3,2 B 6 2021-10-20 09:49:00 2
1 B 12 2021-10-20 09:43:00 1

【问题讨论】:

    标签: mysql group-by sql-order-by ifnull


    【解决方案1】:

    我找到了这个解决方案:

    SELECT GROUP_CONCAT(id),event_code,user,time FROM(
    SELECT 
     id,event_code,user,time,
    if(@a = event_code, @b, @b := @b + 1) as grouping_col,
    @a := event_code
    FROM testing
    JOIN (select @a := 1, @b := 0) as temp
      ) as t
    GROUP BY grouping_col,user
    

    http://sqlfiddle.com/#!9/abfcd4/17

    但是,我如何按时间对分组的行进行排序? 我会有 7,6 但我有 6,7。

    【讨论】:

      【解决方案2】:

      @gasmor 要保持订单,您应该在 group_concat 子句中包含订单语句,更多信息请参见:https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_group-concat,例如:

          SELECT GROUP_CONCAT( id order by `time` desc),event_code,user,time 
      FROM ( SELECT 
                    id,
                    event_code,
                    `user`,
                    `time`,
                     if(@a = event_code, @b, @b := @b + 1) as grouping_col,
                     @a := event_code
             FROM testing
      JOIN ( 
            select @a := 1, @b := 0) as temp
            ) as t
      GROUP BY grouping_col,user ;
      

      演示:https://www.db-fiddle.com/f/vhqJXYFy52xRtVBc97R1EL/4

      当你使用 group by 时,你应该记住:

      所选列应属于 group by 或属于 SUMN()MAX()等聚合函数...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多