web-dev-qa-db-ja.com

MySQL:ORDER BYを使用して特定の文字でクエリを注文することは可能ですか?

私がしたいことは、結果が見つかったすべての行を表示するようにクエリを並べ替えることですが、文字「D」で始まる結果を最初に表示するように並べ替えます。これはORDER BYで可能なことですか? WHEREフィールドLIKE 'D%'を使用できることはわかっていますが、Dの結果だけでなく、すべての結果が欲しいです。

私のクエリは現在次のように見えます:

SELECT pname, pdescription, price FROM products WHERE manufacturer = 3 ORDER BY pname ASC
4
Ryan

以下の例を見てください

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)
8
Abdul Manaf

SELECTステートメントで新しいフィールドを作成して、 'D%'のようなテキストを優先フィールドとして指定し、新しいフィールドで並べ替えることができます。

例:

  SELECT 
    pname
   , pdescription
   , price 
   , CASE WHEN pname LIKE 'D%' 
     THEN 1
      ELSE 2
     END AS sortpreference
FROM products
WHERE manufacturer = 3 
ORDER BY sortpreference; 
2
Jeremy