mysql - Increment value is not coming order wise, when GROUP BY clause uses in select query in Mysql
问题描述
SEQ_NO value is not coming order wise when I use Group by caluse or join a table. SEQ_NO should come order wise even I use ORDER BY clause for another column.
set @S = 0;
SELECT (@S:=@S+1) AS SEQ_NO, abc, def
from table
group by abc
order by abc
解决方案
Since MySQL 8.0 you can use ROW_NUMBER
:
SELECT ROW_NUMBER() OVER (ORDER BY numValue) AS SEQ_NO, abc, def
FROM table_name
GROUP BY abc
ORDER BY abc
In case you are using MySQL earlier 8.0 you have to use a sub-query:
SELECT (@S:=@S+1) AS SEQ_NO, t.*
FROM (
SELECT abc, def
FROM table_name
GROUP BY abc
ORDER BY abc
) t, (SELECT @S:=0) sn
You also GROUP BY abc
but also using def
column in result. The def
column is a nonaggregated column in this case so the query isn't valid if ONLY_FULL_GROUP_BY
is enabled.
推荐阅读
- javascript - 基于条件或重用结构的不同 Html-Tag
- javascript - 使用 JavaScript 合并两个 HTML 行
- html - wordpress 将 div 对齐到中心
- c++ - 在 C++ 中,如果复制一个对象是可能的,但非常昂贵并且通常是一个坏主意,您是否仍然应该使用复制构造函数来实现复制?
- go - 如何修复 Golang 中单值上下文错误的多个值?
- android - 我可以使用 SupportSQLiteOpenHelper 在内部目录或资产文件夹中打开数据库吗?
- javascript - Force Knockout 计算以在替换 observable 内部后重新评估
- javascript - 如何使用 JavaScript 将 JSON 中的 PHP 时间戳转换为日期和时间
- php - 将 html 输入作为 php 的变量
- git - 如何修复 git-lfs 服务器(gitlab)上损坏的文件?