loading..
Русский    English
23:34
листать

Предложение ORDER BY

Использование оператора CASE в предложении ORDER BY позволяет выполнить более сложную сортировку, чем та, которая допускается при использовании сортировки по набору столбцов. При сортировке по столбцу ram можно выполнить ее по возрастанию или по убыванию. Если же мы хотим вывести сначала средние модели, то есть те, которые отвечают W98, потом высшие (W2k), а уже потом низшие (W95), то можно поступить так:

Консоль
Выполнить
  1. SELECT *
  2. FROM PC
  3. ORDER BY CASE
  4. WHEN ram <= 32
  5. THEN '3-W95'
  6. WHEN ram <= 64
  7. THEN '1-W98'
  8. ELSE '2-W2k'
  9. END;

Цифры перед названием ОС проставлены в соответствии с желательным порядком сортировки. В противном случае, упорядочение текстовых значений по возрастанию будет следующим: W2k, W95, W98. Вот результат вышеприведенного запроса (заголовок столбца сортировки выделен прописными буквами):

code model speed RAM hd cd price
3 1233 500 64 5 12x 600
1 1232 500 64 5 12x 600
8 1232 450 64 8 24x 350
2 1121 750 128 14 40x 850
4 1121 600 128 14 40x 850
5 1121 600 128 8 40x 850
6 1233 750 128 20 50x 950
11 1233 900 128 40 40x 980
12 1233 800 128 20 50x 970
7 1232 500 32 10 12x 400
9 1232 450 32 10 24x 350
10 1260 500 32 10 12x 350

Есть еще более интересная возможность сортировки, а именно, сортировать по разным столбцам в зависимости от значения в некотором поле. Пусть, например, в группе W95 мы хотим выполнить сортировку по столбцу speed, в группе W98 — по столбцу hd, в группе W2k — по столбцу price. То есть в каждой группе, характеризуемой ОС описанными выше критериями, нам нужно выполнить сортировку по разным столбцам. Эту, на первый взгляд непростую задачу, решает простой запрос с оператором CASE в предложении ORDER BY:

Консоль
Выполнить
  1. SELECT *
  2. FROM PC
  3. ORDER BY ram,
  4. CASE
  5. WHEN ram <= 32
  6. THEN speed
  7. WHEN ram <= 64
  8. THEN hd
  9. ELSE price
  10. END;

Вот результат этого запроса:

code model speed ram hd cd price
9 1232 450 32 10 24x 350
10 1260 500 32 10 12x 350
7 1232 500 32 10 12x 400
1 1232 500 64 5 12x 600
3 1233 500 64 5 12x 600
8 1232 450 64 8 24x 350
2 1121 750 128 14 40x 850
4 1121 600 128 14 40x 850
5 1121 600 128 8 40x 850
6 1233 750 128 20 50x 950
12 1233 800 128 20 50x 970
11 1233 900 128 40 40x 980

Рекомендуемые упражнения: 65

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100