Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-以随机数字顺序按字段排序_Mysql_Sql - Fatal编程技术网

Mysql SQL-以随机数字顺序按字段排序

Mysql SQL-以随机数字顺序按字段排序,mysql,sql,Mysql,Sql,我有一个SQL查询,我需要使用它来排序字段。通常,在hibernate中,查询会像这样进行 按model.field1、model.field2从模型订单中选择* 问题是,第一种排序需要按照非常具体的顺序进行 其中字段1中的顺序必须按特定顺序过滤 例如,不要按字母顺序列出汽车。我更愿意说 雷克萨斯、福特、丰田、马自达、梅赛德斯等,有没有干净的方法可以做到这一点?目前,我得到了结果,然后不得不把它放在特定的列表中,只是不是很干净。我没有修改数据库中内容的选项 谢谢。您可以使用案例陈述创建自定义订单

我有一个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