Към съдържанието
wannacode

Подреждане, първите N, без повторения

Проблем

Топ 3 за витрината

Собственичката иска на началната страница да са трите най-скъпи продукта. Знаеш как да вземеш името и цената. Но в какъв ред идват редовете и как се взимат само три?

Идеята

ORDER BY

ORDER BY подрежда резултата. По подразбиране от малко към голямо:

SQLбаза: магазин

DESC обръща реда, от голямо към малко:

SQLбаза: магазин

Може да подредиш и по няколко колони: първо по първата, а при равенство по втората. Клиентите по град, а в един град по име:

SQLбаза: магазин

Текстът се подрежда по азбучен ред, датите от вида 2026-10-19 по време.

По-точно, за любопитните

Без ORDER BY редът на редовете не е обещан. Често излиза по id, но това е случайност на начина, по който базата е прочела таблицата. След промяна в таблицата или с нов индекс редът може да се смени. Щом редът е важен за теб, пиши ORDER BY.

Идеята

LIMIT: само първите

LIMIT n връща първите n реда от резултата. Заедно с ORDER BY дава топ N:

SQLбаза: магазин

LIMIT се изпълнява последен, след подреждането. Затова „трите най-скъпи“ е вярно. Без ORDER BY щяха да са три произволни продукта.

OFFSET прескача редове. Така се правят страници: втората страница от поръчките, по 10 на страница:

SQLбаза: магазин

Пробвай

Новите клиенти

Покажи името и датата на регистрация на петимата най-нови клиенти, най-новият пръв.

SQLбаза: магазин

Идеята

DISTINCT: без повторения

От кои градове са клиентите? С SELECT city всеки град се повтаря толкова пъти, колкото клиенти има там. DISTINCT маха повторенията:

SQLбаза: магазин

Шест града и NULL: Борис е без град, и тази липса също е отделен резултат.

Пробвай

Състоянията на поръчките

Покажи всички различни състояния на поръчките, по азбучен ред.

SQLбаза: магазин

Упражнение

Евтините, които ги има

Покажи името, цената и наличността на петте най-евтини продукта, които са в наличност, най-евтиният пръв.

SQLбаза: магазин
По-точно, за любопитните

Къде отиват NULL-ите при подреждане? В SQLite и MySQL при ORDER BY city те са първи, а в PostgreSQL и Oracle са последни. Ако е важно, кажи го изрично: ORDER BY city NULLS LAST. SQLite го разбира от версия 3.30.

SQLбаза: магазин

Тест

Провери се

1. В какъв ред идват редовете на SELECT без ORDER BY?
2. Какво прави LIMIT 10 OFFSET 20?
3. SELECT DISTINCT city FROM customers връща и NULL. Защо?
4. Как се пише „най-скъпите първи“?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·