首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序以具有不连续的列值

问排序以具有不连续的列值
EN

Stack Overflow用户
提问于 2018-10-23 20:09:56
回答 4查看 254关注 0票数 0

这在mysql查询中是可能的吗?当前数据表为:

代码语言:javascript
复制
id - fruit - name
1 - Apple - George
2 - Banana - George
3 - Orange - Jake
4 - Berries - Angela

在name列中,我希望对其进行排序,以便在我的select查询中没有连续的名称。

我想要的输出是,名称列中没有连续的george。

代码语言:javascript
复制
id - fruit - name
1 - Apple - George
3 - Orange - Jake
2 - Banana - George
4 - Berries - Angela

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2018-10-23 20:20:28

在MySQL 8+中,您可以执行以下操作:

代码语言:javascript
复制
order by row_number() over (partition by name order by id)

在早期版本中,您可以使用变量来完成此操作。

票数 2
EN

Stack Overflow用户

发布于 2018-10-23 20:25:51

以下解决方案适用于all the MySQL versions,尤其是低于8.0的版本

在Derived table中,首先使用name和

  • 对实际的表进行排序在具有相同行号的所有行中确定特定行的行号。

  • 现在,使用此结果集并根据 name number值对其进行排序。因此,所有行号=1的行将首先出现(对于所有不同的name值),依此类推。因此,不会出现连续的name行。

您可以使用User-defined Session Variables尝试以下操作

代码语言:javascript
复制
SELECT dt2.id,
       dt2.fruit,
       dt2.name
FROM   (SELECT @row_no := IF(@name_var = dt1.name, @row_no + 1, 1) AS row_num,
               dt1.id,
               dt1.fruit,
               @name_var := dt1.name                               AS name
        FROM   (SELECT id,
                       fruit,
                       name
                FROM   your_table_name
                ORDER  BY name,
                          id) AS dt1
               CROSS JOIN (SELECT @row_no := 0,
                                  @name_var := '') AS user_init_vars) AS dt2
ORDER  BY dt2.row_num,
          dt2.id  

DB Fiddle DEMO

票数 1
EN

Stack Overflow用户

发布于 2018-10-23 20:44:46

另一个想法..。

代码语言:javascript
复制
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL
);

INSERT INTO my_table VALUES
(1,'George'),
(2,'George'),
(3,'Jake'),
(4,'Angela');

SELECT x.* 
  FROM my_table x
  JOIN my_table y 
    ON y.name = x.name 
   AND y.id <= x.id
 GROUP 
    BY x.id
 ORDER
    BY COUNT(*)
     , id;

+----+--------+
| id | name   |
+----+--------+
|  1 | George |
|  3 | Jake   |
|  4 | Angela |
|  2 | George |
+----+--------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52948761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档