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 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 |
#3 · Zasláno: 12. 9. 2016, 12:37:40
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 * |
#4 · Zasláno: 12. 9. 2016, 12:42:53
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 * |
#6 · Zasláno: 12. 9. 2016, 12:49:42
quatzael:
JIstě, omlouvám se za překlep. Ten počet by se dal zjistit pomocí COUNT .
|
||
quatzael Profil |
#7 · Zasláno: 12. 9. 2016, 12:56:08
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 |
#8 · Zasláno: 12. 9. 2016, 12:57:07
quatzael:
SELECT sloupec1, Min(sloupec2), Count(*) FROM tabulka GROUP BY sloupec1 A u postgresql by šlo použít distinct on. |
||
quatzael Profil |
#9 · Zasláno: 12. 9. 2016, 13:08:09
Kajman:
Supr, díky moc!!! To je přesně ono!! |
||
Keeehi Profil |
#10 · Zasláno: 12. 9. 2016, 13:16:47
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';
|
||
Časová prodleva: 8 let
|
0