这在mysql查询中是可能的吗?当前数据表为:
id - fruit - name
1 - Apple - George
2 - Banana - George
3 - Orange - Jake
4 - Berries - Angela在name列中,我希望对其进行排序,以便在我的select查询中没有连续的名称。
我想要的输出是,名称列中没有连续的george。
id - fruit - name
1 - Apple - George
3 - Orange - Jake
2 - Banana - George
4 - Berries - Angela提前谢谢。
发布于 2018-10-23 20:20:28
在MySQL 8+中,您可以执行以下操作:
order by row_number() over (partition by name order by id)在早期版本中,您可以使用变量来完成此操作。
发布于 2018-10-23 20:25:51
以下解决方案适用于all the MySQL versions,尤其是低于8.0的版本
在Derived table中,首先使用name和
name number值对其进行排序。因此,所有行号=1的行将首先出现(对于所有不同的name值),依此类推。因此,不会出现连续的name行。您可以使用User-defined Session Variables尝试以下操作
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 发布于 2018-10-23 20:44:46
另一个想法..。
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 |
+----+--------+https://stackoverflow.com/questions/52948761
复制相似问题