Mysql SQL-以随机数字顺序按字段排序
我有一个SQL查询,我需要使用它来排序字段。通常,在hibernate中,查询会像这样进行 按model.field1、model.field2从模型订单中选择* 问题是,第一种排序需要按照非常具体的顺序进行 其中字段1中的顺序必须按特定顺序过滤 例如,不要按字母顺序列出汽车。我更愿意说 雷克萨斯、福特、丰田、马自达、梅赛德斯等,有没有干净的方法可以做到这一点?目前,我得到了结果,然后不得不把它放在特定的列表中,只是不是很干净。我没有修改数据库中内容的选项Mysql SQL-以随机数字顺序按字段排序,mysql,sql,Mysql,Sql,我有一个SQL查询,我需要使用它来排序字段。通常,在hibernate中,查询会像这样进行 按model.field1、model.field2从模型订单中选择* 问题是,第一种排序需要按照非常具体的顺序进行 其中字段1中的顺序必须按特定顺序过滤 例如,不要按字母顺序列出汽车。我更愿意说 雷克萨斯、福特、丰田、马自达、梅赛德斯等,有没有干净的方法可以做到这一点?目前,我得到了结果,然后不得不把它放在特定的列表中,只是不是很干净。我没有修改数据库中内容的选项 谢谢。您可以使用案例陈述创建自定义订单
谢谢。您可以使用案例陈述创建自定义订单。
CASE语句检查您的条件,并为满足该条件的行指定一个比不满足该条件的行低的值。
举个例子可能最容易理解:
SELECT mycolumn
FROM model
ORDER BY CASE WHEN model.field1 = 'Lexus' THEN 0
WHEN model.field1 = 'Ford' THEN 1
WHEN model.field1 = 'Toyota' THEN 2
WHEN model.field1 = 'Mazda' THEN 3
WHEN model.field1 = 'Mercedes' THEN 4 END, model.field2;
您需要使用窗口函数和PARTITION BY子句,如下所示:
SELECT ROW_NUMBER() OVER(PARTITION BY manufacturer ORDER BY field1) [RN],
manufacturer,
field1,
field2
FROM model
这将根据本例中字段1的顺序,为partition by子句中的每个不同分组提供一个行号
编辑:
如果RDMS不支持窗口功能,则可以按制造商订购第二个值-这将“分组”每个制造商的所有行:
SELECT manufacturer, field1
FROM model
ORDER BY manufacturer, field1
顺便说一句,你不是真的在谈论一个随机顺序。更多的是一个规定的顺序。这在其他一些RDBMS中可能会起作用,但我不相信MySQL支持窗口功能。如果是这样的话,请忽略我的答案。我不使用mySQL,但有一种印象,即窗口函数在标准的供应商通用SQL实现中:
SELECT manufacturer, field1
FROM model
ORDER BY manufacturer, field1