Autor Zpráva
quatzael
Profil
Mám tabulku a potřebuju v ní dostat 2 sloupce, z nichž jeden (slopec1) potřebuju, aby se hodnoty neopakovaly a k tomu potřebuju hodnoty z druhého sloupce, odpovídající řádkům vyfiltrovaným ze sloupce1.

Tedy jako bych měl příkaz:
SELECT DISTINCT sloupec1 from tabulka

ale aby mi k tomu vyjely i odpovídající hodnoty ze sloupce 2.

Nevíte prosím někdo jak na to?
Keeehi
Profil
Pokud máš tabulku
aaa | x123
aaa | x456
bbb | x789

Tak pokud má být ten první sloupec unikátní, tak se má vrátit
aaa | x123
bbb | x789
nebo
aaa | x456
bbb | x789
?
Vidíš ten problém?

 

Co by tak ještě dávalo smysl je takovýto výsledek.
aaa | x123 x456
bbb | x789
quatzael
Profil
Keeehi:
Vidím ho, vím o tom a je mi to jedno. Dějme tomu, že v tom druhém sloupci je DATETIME. Jak tedy udělat, aby to vrátilo hodnoty s nejnovějším časem..

P.S. myslel jsem, že v takovém případě SQL vybírá vždy první řádky (podle unikátního klíče, pokud to není jinak zadáno)
Tomášeek
Profil *
Tak snad stačí normálně seřadit, ne?

GROUP BY sloupec1, ORDER BY sloupec2
quatzael
Profil
Ale docela by mě i zajímal SQL dotaz, který by dal:
aaa | x123 | 2
bbb | x789 | 1

kde v tom třetím sloupci by byl uveden skutečný počet řádků pro každý unikátní záznam ze sloupce1


Tomášeek:
To je asi ono, až na to, že se tam nepíše čárka uprostřed. Háže mi to pak syntaxtickou chybu..
Díky.
Tomášeek
Profil *
quatzael:
JIstě, omlouvám se za překlep.

Ten počet by se dal zjistit pomocí COUNT.
quatzael
Profil
Tomášeek:
COUNT samozřejmě znám jenom v SQL trochu plavu. Umím pomocí COUNT dostat celkový počet výsledků hledání, ale ne takhle pro každou položku do samostatnýho sloupce..
Kajman
Profil
quatzael:

SELECT sloupec1,
       Min(sloupec2),
       Count(*)
FROM   tabulka
GROUP  BY sloupec1  

A u postgresql by šlo použít distinct on.
quatzael
Profil
Kajman:
Supr, díky moc!!! To je přesně ono!!
Keeehi
Profil
quatzael:
P.S. myslel jsem, že v takovém případě SQL vybírá vždy první řádky (podle unikátního klíče, pokud to není jinak zadáno)
No ono se to tak většinou bude chovat protože ... >>spousta teorie o databázích<< ale zaručeno to nemáš. Navíc jiné databáze ti třeba takový dotaz ani nepustí, protože nedává smysl. To že to je tobě jedno databázi nezajímá. Mód, kde po tobě i mysql databáze bude vyžadovat jen správné dotazy se dá zapnout pomocí SET sql_mode = 'ONLY_FULL_GROUP_BY';

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0