【问题标题】:How to select all enteties grouped by common propertie without loop?如何在没有循环的情况下选择按公共属性分组的所有实体?
【发布时间】:2021-11-03 01:57:24
【问题描述】:

有没有办法从按公共属性while循环分组的表中提取所有实体?

存储是这样的

id         |  product_id   | category_id
-----------+-----------------------+--------------------------
1          |       1       | 15
2          |       2       | 17
3          |       3       | 18
4          |       4       | 17
5          |       5       | 15
6          |       6       | 17
7          |       7       | 18

最终结果应该是这样的

    id         |  product_id   | category_id
    -----------+-----------------------+--------------------------
    1          |       1       | 15
    2          |       2       | 17
    3          |       3       | 18
    4          |       5       | 15
    5          |       4       | 17
    6          |       7       | 18
    7          |       6       | 15

我想要的是这个:

选择按类别 ID 分组的每条记录。这意味着,如果表大小为 3200,我需要按 ASC 顺序选择按类别 id 分组的所有 3200 条记录

【问题讨论】:

    标签: mysql sql database loops


    【解决方案1】:

    您似乎希望这些值交错。您可以在order by 中使用row_number()

    select s.*
    from storage s
    order by row_number() over (partition by storage_id order by id),
             storage_id;
    

    Here 是一个 dbfiddle。

    编辑:

    在旧版本的 MySQL 中,您可以使用变量在每个组中分配一个序号,然后使用它进行排序:

    select s.*
    from (select s.*,
                 (@rn := if(@sid = storage_id, @rn + 1,
                            if(@sid := storage_id, 1, 1)
                           )
                 ) as seqnum
          from (select s.* from storage s order by storage_id, id) s cross join
               (select @rn := 0, @sid := -1) params
         ) s
    order by seqnum, id;
    

    SQL Fiddle 有这两种方法。

    【讨论】:

    猜你喜欢
    • 2015-12-17
    • 2016-05-04
    • 2011-03-29
    • 2013-11-07
    • 2015-03-23
    • 2021-05-13
    • 2021-07-15
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多