Portál AbcLinuxu, 12. května 2025 17:14
Dobry den.
Mam tabulku nasledovne:
=========================
prvni druhy
10 GG
40 TT
40 RR
20 AA
20 EE
10 JJ
40 ZZ
10 HH
20 DD
20 BB
Jestlize zadam:
select prvni from tabulka order by druhy
pak dostanu tohle:
| 20 |
| 20 |
| 20 |
| 20 |
| 10 |
| 10 |
| 10 |
| 40 |
| 40 |
| 40 |
Ale ja bych chtel tyhle cisla prave jednou, tedy takhle:
| 20 |
| 10 |
| 40 |
Ale bohuzel u TSQL pouhe pridani "distinct" do selectu neponechava poradi tech cisel (vypise napr. 40, 20, 10)... V MySQL jsem to ted vyzkousel, tam jsem dostal vysledek, ktery jsem ocekaval, nicmene, nevim, zda to musi fungovat vzdy. Jak tento problem vyresit spravne? Distinct by mel ponechat poradi, co vytvoril "order by"?
Dekuji.
Distinct nezaručuje pořadí - k tomu slouží výhradně ORDER BY. To, že provede v MySQL zároveň order by, je jen vedlejší efekt implementace. Kromě setřídění a vyházení duplicit ještě existuje další způsob založený na hash tabulkách. Tento způsob je (pro většinu dat) řádově rychlejší a už z principu nevede k seřazení dat.
To, že se sešla stejná čísla za sebou je náhoda (nebo druhý sloupeček nějak souvisí s prvním). Mohlo by se přeci stát, že by byla na přeskáčku. Jak by se pak měla čísla při seskupení seřadit? Možná by mohlo fungovat něco jako
select prvni from tabulka group by prvni order by min(druhy)
select prvni from tabulka group by prvni order by min(druhy)
Ano, na SyBase ASE 15 to funguje.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.