Sha*_*ock 55 mysql sql-order-by
我想按照下面列出的顺序(数字1-12)对以下数据项进行排序:
1 2 3 4 5 6 7 8 9 10 11 12
但是,我的查询 - 首先使用order by xxxxx asc第一个数字排序:
1 10 11 12 2 3 4 5 6 7 8 9
有什么技巧让它更合适吗?
此外,为了充分披露,这可能是字母和数字的混合(虽然现在不是),例如:
A1 534G G46A 100B 100A 100JE
等等....
谢谢!
更新:人们要求查询
select * from table order by name asc
Run Code Online (Sandbox Code Playgroud)
Jom*_*oos 96
人们使用不同的技巧来做到这一点.我用Google搜索并找出一些结果,每个都遵循不同的技巧.看看他们:
编辑:
我刚为未来的访问者添加了每个链接的代码.
给定输入
1A 1a 10A 9B 21C 1C 1D
预期产出
1A 1C 1D 1a 9B 10A 21C
询问
Bin Way
===================================
SELECT
tbl_column,
BIN(tbl_column) AS binray_not_needed_column
FROM db_table
ORDER BY binray_not_needed_column ASC , tbl_column ASC
-----------------------
Cast Way
===================================
SELECT
tbl_column,
CAST(tbl_column as SIGNED) AS casted_column
FROM db_table
ORDER BY casted_column ASC , tbl_column ASC
Run Code Online (Sandbox Code Playgroud)
给定输入
Table: sorting_test -------------------------- ------------- | alphanumeric VARCHAR(75) | integer INT | -------------------------- ------------- | test1 | 1 | | test12 | 2 | | test13 | 3 | | test2 | 4 | | test3 | 5 | -------------------------- -------------
预期产出
-------------------------- -------------
| alphanumeric VARCHAR(75) | integer INT |
-------------------------- -------------
| test1 | 1 |
| test2 | 4 |
| test3 | 5 |
| test12 | 2 |
| test13 | 3 |
-------------------------- -------------
Run Code Online (Sandbox Code Playgroud)
询问
SELECT alphanumeric, integer
FROM sorting_test
ORDER BY LENGTH(alphanumeric), alphanumeric
Run Code Online (Sandbox Code Playgroud)
给定输入
2a, 12, 5b, 5a, 10, 11, 1, 4b
Run Code Online (Sandbox Code Playgroud)
预期产出
1, 2a, 4b, 5a, 5b, 10, 11, 12
Run Code Online (Sandbox Code Playgroud)
询问
SELECT version
FROM version_sorting
ORDER BY CAST(version AS UNSIGNED), version;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
小智 14
我知道这篇文章已经关闭,但我认为我的方式可以帮助一些人.那就是:
我的数据集非常相似,但有点复杂.它有数字,字母数字数据:
1
2
Chair
3
0
4
5
-
Table
10
13
19
Windows
99
102
Dog
Run Code Online (Sandbox Code Playgroud)
我想首先使用' - '符号,然后是数字,然后是文本.
所以我这样做:
SELECT name, (name = '-') boolDash, (name = '0') boolZero, (name+0 > 0) boolNum
FROM table
ORDER BY boolDash DESC, boolZero DESC, boolNum DESC, (name+0), name
Run Code Online (Sandbox Code Playgroud)
结果应该是:
-
0
1
2
3
4
5
10
13
99
102
Chair
Dog
Table
Windows
Run Code Online (Sandbox Code Playgroud)
整个想法是对SELECT进行一些简单的检查并使用结果进行排序.
And*_*aal 12
这样做:
SELECT * FROM table ORDER BY column `name`+0 ASC
Run Code Online (Sandbox Code Playgroud)
追加+0意味着:
0,10,11,2,3,4
成为:
0,2,3,4,10,11
我恨这个,但是这会工作
order by lpad(name, 10, 0) <-- assuming maximum string length is 10
<-- you can adjust to a bigger length if you want to
Run Code Online (Sandbox Code Playgroud)
我有一些很好的结果
SELECT alphanumeric, integer FROM sorting_test ORDER BY CAST(alphanumeric AS UNSIGNED), alphanumeric ASC
Run Code Online (Sandbox Code Playgroud)
这适用于数据类型:Data1、Data2、Data3 ......、Data21。表示“数据”字符串在所有行中都是通用的。
对于 ORDER BY ASC 它将完美排序,对于 ORDER BY DESC 不适合。
SELECT * FROM table_name ORDER BY LENGTH(column_name), column_name ASC;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104270 次 |
| 最近记录: |