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

时间:2012-03-05 00:11:40

标签: mysql sql

我有一个SQL查询,我需要用它来订购一个字段。通常,在hibernate

中查询会是这样的

通过model.field1,model.field2从模型顺序中选择* 问题是第一种需要按照特定的顺序进行。

必须以特定顺序过滤field1中的订单。

因此,不是按字母顺序列出汽车,例如。我更愿意说 雷克萨斯,福特,丰田,马自达,梅赛德斯等。有这么干净的方法吗?目前我得到了结果,然后必须把它放在特定的列表中,并且不是很干净。我没有选择修改数据库中的东西

感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用CASE语句创建自定义ORDER BY 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;

答案 1 :(得分:1)

order by (case
 when field1 = 'Lexus' then 1
 when field1 = 'Ford' then 2
 when field1 = 'Toyota' then 3
 ...
 else null end)

答案 2 :(得分:0)

您需要使用窗口函数和PARTITION BY子句,如下所示:

SELECT ROW_NUMBER() OVER(PARTITION BY manufacturer ORDER BY field1) [RN],
       manufacturer,
       field1,
       field2

FROM model

这将根据此示例中field1的顺序为partition by子句中的每个不同分组提供行号。

编辑:

如果您的RDMS不支持窗口功能,您可以按制造商订购第二个值 - 这会将每个制造商的所有行“组合”在一起:

SELECT manufacturer, field1

FROM model

ORDER BY manufacturer, field1