SQL Order by – seřaďte data v tabulce

ORDER BY klauzule v SQL umožňuje výsledky dotazu uspořádat podle určitého pole (sloupce). Existují 2 základní možnosti seřazení záznamů v tabulce.

  • Vzestupně (ascending order = ASC) – seřadí záznamy od nejmenšího po největší v případě čísel nebo o „A“ do „Z“ v případě textových řetězců.
  • Sestupně (descending order = DESC) seřadí záznamy od největšího po nejmenší u čísel a od „Z“ do „A“ u textu

Pokud neuvedeme jak chceme data v ORDER BY uspořádat, provede se defaultní nastavení, což je vzestupné řazení ASC

Pořadí v SQL skriptu

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

Syntaxe:

SELECT [Sloupec1], [Sloupec2], [Sloupec3]
FROM Tabulka
WHERE pole [Operator] hodnota
ORDER BY [Sloupec1] ASC/DESC, [Sloupec2] ASC/DESC

Tato klauzule patří úplně nakonec. Uspořádat data lze buď podle jednoho nebo podle více sloupců. V tomto případě filtrujeme prioritně podle [Sloupec1] vzestupně a sekundárně podle sloupce [Sloupec2] sestupně.

Příklad klauzule SQL ORDER BY

Tabulka se kterou budeme pracovat má strukturu viz obrázek níže a obsahuje 18484 záznamů:

Dimcustomer-pred-WHERE-klauzuli

Vstupní data

navážeme na článek SQL WHERE a kromě toho, že použijeme klauzuli WHERE, tak také výsledek přehledně uspořádáme.

Tentokrát budeme chtít z tabulky

  • vybrat všechny zákazníky, kteří mají [CustomerKey] mezi 10000 a 15000
  • výsledek uspořádat podle příjmení [LastName] abecedně a současně podle datumu narození [BirthDate] sestupně

SELECT [CustomerKey]
,[FirstName]
,[LastName]
,[BirthDate]
,[Gender]
FROM [AdventureWorksDW2012].[dbo].[DimCustomer]
WHERE CustomerKey BETWEEN 10000 AND 15000
ORDER BY LastName ASC, BirthDate DESC

Výsledkem je tabulka, kdy je výsledek seřazen nejprve podle Příjmení od A do Z a pokud nastane shoda v příjmení (např. Mr. Adams na obrázku) řadíme ještě podle datumu narození sestupně. Připojuji obrázek s vysvětlením jak jsou data seřazena:

SQL-ORDER-BY

Použití

Pokud bychom pořadí v ORDER BY klauzuli otočili, byl by výsledek samozřejmě úplně jiný, protože bychom nejdříve řadili podle datumu narození [BirthDate] a až poté podle Příjmení [LastName], podívejte se jak by to vypadalo:

SQL-ORDER-BY-prohozeni-poradi

Příklad

Reagovat na příspěvek