mysql - 按字段组合排序

标签 mysql sql sql-server

我有这组规则来对 MySQL 和 sql-server 中的结果进行排序:

  1. 首先按 qty 排序- 从最高到最低
  2. 以上排序结果再次按storage排序,然后先放 2,比 值 >2,比 <2
  3. 以上排序结果再次按price排序- 从最低到 最高

我写了以下子句:

  1. ORDER BY table.qty DESC
  2. ORDER BY FIELD (table.storage, =2, >2, <2)
  3. ORDER BY table.price ASC

对我来说,结合数据意味着:

qty,storage,price
0,0,0
1,1,10
1,2,22
1,3,10
2,3,10
1,2,9

我会得到:

qty,storage,price
2,3,10
1,2,9
1,2,22
1,1,10
1,3,10
0,0,0

我需要两件事的帮助:

1 - 第二个子句返回错误,我想这是因为操作符的错误使用:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>2,<2)

2 - 如何将这些子句链接在一起

我真的不知道该怎么做,但让下面的伪查询来说明它:

SELECT
    *
FROM
    table
ORDER BY
    table.qty DESC
AND
    ORDER BY FIELD (
        table.storage, =2, >2, <2
    )
AND
    ORDER BY
        table.price ASC

最佳答案

对于 MSSQLServer 你可以使用

SELECT
    *
FROM
    table
ORDER BY
    table.qty DESC,
    CASE
        WHEN table.storage = 2 THEN 1
        WHEN table.storage > 2 THEN 2
        WHEN table.storage < 2 THEN 3
    END ASC,
    table.price ASC

CASE (Transact-SQL)

关于mysql - 按字段组合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26725681/

相关文章:

sql - 是否可以使用临时表左外连接普通表?

XAMPP 服务器上的 Mysql 无法启动。

mysql - 将权限从一个mysql数据库复制到另一个

php - 从 HTML 表单向 SQL 表插入数据

sql - 自动将数据从一张表复制到另一张表

sql - 在 SQL 中编写函数以循环访问 UDF 中的日期范围

sql-server - 使用 CFINSERT 后获取主键 - ColdFusion

sql - 无法删除约束 - SQL Server 2008 R2

mysql - 使用带有 Breeze Angular mySql Node Express 堆栈的命名约定的异常

codeigniter 中的 php session 和数据库