繁体   English   中英

MySQL查询-如何创建此查询?

[英]mysql query - how can I create this query?

我在创建查询时遇到问题。

可以说我在表中有此数据:字段ID:

10 20 30 40 30 20 60 70 20

我需要显示所有结果,但是这样:

10 20 30 40 60 70 20 30 20

如您所见,我对它们进行了排序,但是它必须仅接受唯一值,直到没有更多值为止,然后使用相同的过滤器添加左侧值(仅唯一值),直到将所有结果显示在数据库上为止。

任何想法? 谢谢

尝试此操作,查询应首先对值2之后的所有行进行排序,依此类推2

SET @prev_value = NULL;
SET @rank_count = 0;

SELECT id, rank_column, CASE
    WHEN @prev_value = rank_column THEN @rank_count
    WHEN @prev_value := rank_column THEN @rank_count := @rank_count + 1
END AS rank
FROM rank_table
ORDER BY rank_column

为ID添加序列号,并按序列号和ID进行排序。

SELECT id
FROM
(
    SELECT id, @cnt := IF(id = @id, @cnt + 1, 1), @id := id, @cnt AS cnt
    FROM 
    (
        SELECT id
        FROM table1
        ORDER BY id
    ) sub1
    CROSS JOIN (SELECT @cnt := 0, @id := 0) sub0
) sub2
ORDER BY cnt, id

从MySQL 8.0开始,您可以使用ROW_NUMBER

CREATE TABLE tab(col INT);
INSERT INTO tab(col)
VALUES (10),(20), (30), (40), (30), (20),  (60), (70), (20);

SELECT t.col
FROM tab t
ORDER BY ROW_NUMBER() OVER (PARTITION BY col ORDER BY col), t.col;

DBFiddle演示

输出:

┌─────┐
│ col │
├─────┤
│  10 │
│  20 │
│  30 │
│  40 │
│  60 │
│  70 │
│  20 │
│  30 │
│  20 │
└─────┘

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM