我在创建查询时遇到了问题。
假设我在表格中有这些数据:字段ID:
10 20 30 40 30 20 60 70 20
我需要显示所有结果,但这样:
10 20 30 40 60 70 20 30 20
正如你所看到的,我对它们进行了排序,但它必须只采用唯一的值,直到它不再有,然后添加左边应用相同的过滤器...只有uniques ...一直如此,直到它显示所有结果数据库中。
有什么想法吗? 感谢
答案 0 :(得分:0)
试试这个,查询应首先在第2个之后排序值为1的所有行,依此类推
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
答案 1 :(得分:0)
为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
答案 2 :(得分:0)
从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 Demo 强>
输出:
┌─────┐
│ col │
├─────┤
│ 10 │
│ 20 │
│ 30 │
│ 40 │
│ 60 │
│ 70 │
│ 20 │
│ 30 │
│ 20 │
└─────┘