我正在使用MySQL5.5版本编写SQL查询来进行排序。我的问题是无法正确使用SQL查询下面的列name
排序。
select t.id,t.name
from
(
select t.*, cast((case when col1_col2_ref > 0
then
substring_index(modified_name,'-',1)
else
modified_name
end
) as unsigned) col1
, cast((case when col1_col2_ref > 0
and col3_ref > 0
then
substr(modified_name,(col1_col2_ref + 1),(col3_ref - (col1_col2_ref + 1)))
when col1_col2_ref > 0
then
substr(modified_name,(col1_col2_ref + 1))
end) as unsigned) col2
, cast((case when col3_ref > 0
and col4_ref > 0
then
substr(modified_name,(col3_ref + 1),(col4_ref - (col3_ref + 1)))
when col3_ref > 0
then
substr(modified_name,(col3_ref + 1))
end) as unsigned) col3
, cast((case when col4_ref > 0
then
substr(modified_name,(col4_ref + 1))
end) as unsigned) col4
from
(
select t.*,substring_index(name,' ',1) modified_name
,locate('-',name,1) col1_col2_ref
,locate('/',name,1) col3_ref
,locate('/',name,locate('/',name,1)+1) col4_ref
from filing_code_management t
) t
) t
order by col1,col2,col3,col4
这是我的数据库链接,显示我的排序错误https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=bcb32a6b47d0d5b061fd401d0888bdc3
实际上,我想对列name
模式进行排序,如下所示:
id | name
33 100 PENTADBIRAN
40 100-1 Perundangan
46 100-1-1 Penggubalan/Penyediaan/Pindaan Undang-Undang/Peraturan
48 100-1/1/1 Undang-Undang Kecil Kerja Di Jalan 1996
49 100-1/1/2 Undang-Undang Kecil Peruntukan Mengenai Lesen Bersesama (Majlis Perbandaran Klang) 1992
264 100-6 Pengurusan Mesyuarat
265 100-6-1 Mesyuarat Dalam Jabatan
266 100-6-1-1 Mesyuarat Penuh Bulanan SUP
267 100-6-1-2 Mesyuarat Khas Belanjawan JKEW
303 100-6-2 Mesyuarat Luar Jabatan
304 (S)100-6-2-1 Mesyuarat Dewan Undangan Negeri JKK
305 (R)100-6-2-2 Mesyuarat Majlis Kerajaan Negeri (MMKN) JKK
306 (S)100-6-2-3 Mesyuarat Tindakan Ekonomi Selangor (MTES) SUP
455 100-7 Kemudahan (Fasiliti)
456 100-7-1 Tempahan/Penggunaan Premis Ibu Pejabat dan Cawangan JKP
457 100-7-1-1 Bilik Mesyuarat/Auditorium
我的错误排序在MySQL5.5的结果,它不能正确排序在表。
错误
希望有人能指导我解决这个问题。多谢了。
这里有一个查询,我认为它将按您所希望的顺序排序。最里面的子查询在第一个空格处拆分name
字段;删除结果开头()
中包含的任何文本,然后用-
替换/
。外部的子查询将结果字符串拆分为-
上的1到4个部分,条件聚合用于将这些值放入col1
、col2
、col3
和col4
中。然后将此子查询连接到主表的id
字段,结果按col1
到col4
排序:
select t.*
from filing_code_management t
join (
select id,
CAST(MAX(CASE WHEN f.n = 1 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(modified_name, '-', f.n), '-', -1) END) AS UNSIGNED) col1,
CAST(MAX(CASE WHEN f.n = 2 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(modified_name, '-', f.n), '-', -1) END) AS UNSIGNED) col2,
CAST(MAX(CASE WHEN f.n = 3 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(modified_name, '-', f.n), '-', -1) END) AS UNSIGNED) col3,
CAST(MAX(CASE WHEN f.n = 4 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(modified_name, '-', f.n), '-', -1) END) AS UNSIGNED) col4
from
(
select t.id, replace(substr(substring_index(t.name,' ',1), locate(')', substring_index(t.name,' ',1))+1), '/', '-') modified_name
from filing_code_management t
) t
join (select 1 n union all select 2 union all select 3 union all select 4) f
on length(replace(t.modified_name, '-', '')) <= length(t.modified_name) - f.n + 1
group by id
) c on t.id = c.id
order by c.col1, c.col2, c.col3, c.col4
dbfiddle演示
问题内容: 我有一个表,存储的版本如下 我的要求是我需要对它们进行排序,以便输出为 但是,如果通过简单的命令不能按预期工作 需要帮助 问题答案: 实施大脑解决方案
问题内容: 在Oracle中,仅使用不会对版本号进行排序。我的字段被声明为a,并且无法更改。例如:以下版本: 应该排序为 我研究了几篇文章,但似乎都没有真正达到我的目的,或者答案是针对SQL Server等的,而不是针对Oracle的。我碰到了这个看起来很有效的特定sql。 以这种方式对版本进行排序: 我相信此sql语句适用于: 但是,这不适用于Oracle。在Oracle中,hierarchyi
问题内容: 是否可以在SQL中使用hibernate方式对集合进行排序,而无需使用接口,不使用注释-仅使用条件的addOrder。 我试过了,它添加了order by子句,但是集合没有排序。 我使用hibernate3.4。 问题答案: NHibernate Set没有“ order”,即使set映射支持order- by。请参阅Ayende的说明: 请注意,[order-by]不适用于通用集,并
问题内容: 我得到以下结果 我要订购最近发生的事件。供应商具有最新的事件,因此应该首先与同一供应商的所有其他事件一起发生,然后是所有事件均按降序排列的下一个供应商。期望的结果是这样的- 没有给出期望的输出。有什么帮助吗? 问题答案: 使用分析功能: 请参阅: http: //docs.oracle.com/javadb/10.8.2.2/ref/rrefsqlj13658.html http://
问题内容: 有一段时间遇到这个麻烦。 我有这样的数据库: 我要执行搜索,找到最便宜的汽车,然后按价格升序订购其余相同品牌的汽车。 我希望我的输出是这样的: 最便宜的汽车是福特嘉年华(Forest Fiesta),因此,其余福特车型都按照价格直接订购。然后,本田拥有第二便宜的车型,因此爵士车和其他本田车紧随其后,依此类推。 这可能吗? 问题答案: 您需要做的是创建一个瞬态数据集,该数据集包含car_
问题内容: STRINGS.txt的示例内容: 是否可以仅使用bash对所有这些版本字符串进行排序,而最新版本位于顶部? 问题答案: 这是可能的,但工作量却很愚蠢。如果您使用GNU排序: …将完全按照您的要求进行。 现在,如果您 真的 没有任何外部工具,那么您将遇到麻烦。Freenode的#bash IRC频道上的BlastHardcheese已在本机bash中编写了以下quicksort算法,出