Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
#1 · Zasláno: 4. 11. 2011, 19:06:45
Potřebuji vypsat z tabulky pouze záznamy, které jsou vícekrát, ale pomocí příkazu group takto mi to nejde:
select * from tabulka group by sloupec Ještě upřesním, že sloupec není primary ani uniqe key, ale bežný sloupec na kterém může dojít k duplicitním datům. |
||
okolojdouci Profil * |
#2 · Zasláno: 4. 11. 2011, 19:10:32
Napadá mě ..
SELECT DISTINCT * FROM tabulka WHERE ID NOT IN (SELECT DISTINCT ID FROM table) |
||
CZechBoY Profil |
#3 · Zasláno: 4. 11. 2011, 19:44:49
DISTINCT ale vrací výsledky jen jednou, nemůže vrátit 2 stejný výsledky..
zkus SELECT * FROM tabulka t1 WHERE (SELECT COUNT(1) FROM tabulka t2 WHERE t2.nazev=t1.nazev)>1 |
||
okolojdouci Profil * |
#4 · Zasláno: 4. 11. 2011, 19:57:54
Měl jsem tam chybu.
SELECT sloupec FROM tabulka WHERE ID NOT IN (SELECT ID FROM tabulka GROUP BY sloupec ) GROUP BY sloupec |
||
xlifer Profil |
#5 · Zasláno: 4. 11. 2011, 20:35:34
okolojdouci:
A to ID je myšleno jako primary key? |
||
okolojdouci Profil * |
#6 · Zasláno: 4. 11. 2011, 20:54:04
xlifer:
Ano. Úvaha je asi taková: 1. vyber všechno, seskup podle "sloupec" 2. toto odečti ze skupiny, kde je úplně všechno Co zbyde? To, co v té skupině "všechno" mělo hodnotu "sloupec" víc než jednou 3. seskup podle "sloupec" Výsledkem jsou všechny hodnoty "sloupec", které v té tabulce jsou víc než jednou. |
||
xlifer Profil |
#7 · Zasláno: 4. 11. 2011, 21:13:11 · Upravil/a: xlifer
Díky za obě řešení, fungují, ale zajímavé je, že řešení od CZechBoY vypíše přesně jednou tolik záznamu co řešení od okolojdouci. Teď je otázka, které funguje správně... To zatím nevím, protože projít db ručně a zkontrolovat výsledky je teda dosti náročné při 5tis. záznamech :-(
SELECT * FROM tabulka t1 WHERE (SELECT COUNT(1) FROM tabulka t2 WHERE t2.nazev=t1.nazev)>1 vypise 24 zaznamu SELECT sloupec FROM tabulka WHERE ID NOT IN (SELECT ID FROM tabulka GROUP BY sloupec ) GROUP BY sloupec vypise 12 zaznamu |
||
jenikkozak Profil |
#8 · Zasláno: 4. 11. 2011, 21:19:33 · Upravil/a: jenikkozak
xlifer:
Není to tím, že první řešení vypíše v případě, že sloupec obsahuje dvě totožné hodnoty, oba dva řádky, zatímco druhé řešení vypíše pouze jednu? To druhé je tedy ekvivalentní pro dotaz bez subvýrazu (tedy dotaz rychleji zpracovatelný): SELECT *, COUNT(*) as pocet FROM tabulka GROUP BY sloupec HAVING pocet>1 |
||
xlifer Profil |
#9 · Zasláno: 4. 11. 2011, 21:55:02 · Upravil/a: xlifer
jenikkozak:
Ano, je to tak, neuvědomil jsem si to, až teď.. Takže řešení od okolojdouci je naprosto OK a korektní, ale pravda moc svižné zpracování dotazu to není a chvilku to trvá. Otázka je jak by to šlo optimalizovat na rychlejší provedení? (zda je vůbec možné) |
||
Kajman_ Profil * |
#10 · Zasláno: 5. 11. 2011, 09:28:48
select t.* from tabulka t join (select sloupec from tabulka group by sloupec having count(*) > 1) d on t.sloupec = d.sloupec |
||
Časová prodleva: 14 let
|
0