MySQL:是否可以使用 ORDER BY 按特定字母对查询进行排序?

Rya*_*yan 4 mysql order-by select

我想要做的是对我的查询进行排序,以便结果显示找到的每一行,但通过显示以字母“D”开头的结果进行排序。这是可以与 ORDER BY 做的事情吗?我知道我可以使用 WHERE 字段 LIKE 'D%',但我想要所有结果,而不仅仅是那些带有 D 的结果。

我的查询目前如下所示:

SELECT pname, pdescription, price FROM products WHERE manufacturer = 3 ORDER BY pname ASC
Run Code Online (Sandbox Code Playgroud)

Abd*_*naf 8

看看下面的例子

DROP TABLE IF EXISTS products;

create table products(pname CHAR(30),pdescription CHAR(30),price DECIMAL(10,2),manufacturer CHAR(30));

INSERT INTO products VALUES
    ('Toys','These are toys',15.25,'ABC'),
    ('Dolls','These are Dolls',35.25,'PQR'),
    ('DustPan','These are DustPan',75.25,'AZD'),
    ('Doors','These are Doors',175.25,'RAZD'),
    ('TV','These are TV',11175.25,'RAZD'),
    ('Bed','These are Bed',1175.25,'ARAZD');

/** Check all data **/

SELECT * FROM products;
+---------+-------------------+----------+--------------+
| pname   | pdescription      | price    | manufacturer |
+---------+-------------------+----------+--------------+
| Toys    | These are toys    |    15.25 | ABC          |
| Dolls   | These are Dolls   |    35.25 | PQR          |
| DustPan | These are DustPan |    75.25 | AZD          |
| Doors   | These are Doors   |   175.25 | RAZD         |
| TV      | These are TV      | 11175.25 | RAZD         |
| Bed     | These are Bed     |  1175.25 | ARAZD        |
+---------+-------------------+----------+--------------+
6 rows in set (0.00 sec)

/** Order by D% **/
SELECT 
        pname, pdescription, price
    FROM
        products
    ORDER BY 
    CASE
        WHEN pname LIKE 'D%' THEN 1
        ELSE 2
    END;
+---------+-------------------+----------+
| pname   | pdescription      | price    |
+---------+-------------------+----------+
| Dolls   | These are Dolls   |    35.25 |
| DustPan | These are DustPan |    75.25 |
| Doors   | These are Doors   |   175.25 |
| Toys    | These are toys    |    15.25 |
| TV      | These are TV      | 11175.25 |
| Bed     | These are Bed     |  1175.25 |
+---------+-------------------+----------+
6 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

  • 您可以在`ORDER BY` 子句中使用任何表达式。你也可以使用`ORDER BY CASE...END, pname;`如果你关心以D开头的单词的次要顺序(应该`'Dallas'`在`'Dolls'`之前或者你不在乎?) 以及以其他字母开头的行。 (2认同)