私がしたいことは、結果が見つかったすべての行を表示するようにクエリを並べ替えることですが、文字「D」で始まる結果を最初に表示するように並べ替えます。これはORDER BYで可能なことですか? WHEREフィールドLIKE 'D%'を使用できることはわかっていますが、Dの結果だけでなく、すべての結果が欲しいです。
私のクエリは現在次のように見えます:
SELECT pname, pdescription, price FROM products WHERE manufacturer = 3 ORDER BY pname ASC
以下の例を見てください
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)
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;