ORDER BY klauzule v SQL umožňuje výsledky dotazu uspořádat podle určitého pole (sloupce) nebo více sloupců. 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

Tip: 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 ORDER BY:

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

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 příklad v článku SQL WHERE a kromě toho, že jsme na tabulku použili omezující podmínku, tak také výsledek přehledně uspořádáme pomocí ORDER BY.

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
Rate this post

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published. Required fields are marked *