Zadejte hledaný výraz...

Jak získat všechny záznamy s unikátní hodnou v jednom sloupci a rozdílnými v druhém

Hezký den, 
potřebuji poradit s SQL dotazem. 
Mám tabulku v které jsou sloupce:
ID|sku|value
a potřebuji získat sku, které má přiřazené value = 3 a zároveň value = 4
1|A|3
2|A|4
3|B|3
4|B|4
5|C|3
6|C|7
Výsledek by měl být A + B, protože sku C má přiřazené hodnoty 3 a 7. 
Děkuji za jakoukoliv radu.
14. 3. 2022 07:25:26
https://webtrh.cz/diskuse/jak-ziskat-vsechny-zaznamy-s-unikatni-hodnou-v-jednom-sloupci-a-rozdilnymi-v-druhem/#reply1499585
TomasX
verified
rating uzivatele
(4 hodnocení)
14. 3. 2022 08:56:01
A existuje případ, kdy máš duplicitní ID a sku a rozdílnou value?
select id, sku, max(value)
from tabulka
group by id, sku
Případně pokud mohou být duplicitní id a sku, tak:
select id, sku, value
from tabulka
group by id, sku, value
edit: tak nic, ty chceš filtrovat podle společných hodnot. Jednoduché řešení mě teď nenapadá
14. 3. 2022 08:56:01
https://webtrh.cz/diskuse/jak-ziskat-vsechny-zaznamy-s-unikatni-hodnou-v-jednom-sloupci-a-rozdilnymi-v-druhem/#reply1499584
TomasX
verified
rating uzivatele
(4 hodnocení)
14. 3. 2022 09:05:14
Jak moc máš variabilní ty filtry? Pokud máš jen dva, lze to udělat nějak takhle:
select a.id, a.sku, a.value
from tabulka a
join (
select id, sku, max(value), min(value)
from tabulka
group by id, sku
having max(value) == 4 and min(value) == 3
) as b using id
V SQL je těžké pracovat s kontextem, primárně se všechny filtry dělají na řádku, takže pokud jsi schopný převést hodnotx na řádek (tady jsem si pomohl s min/max, ale jde použít třeba i group_concat), můžeš filtrovat s omezením, že u velkých tabulek to bude pomalé. Jinak na tohle se používají window funkce, bohužel je mají až nové mysql a není to tak běžné na hostingách.
14. 3. 2022 09:05:14
https://webtrh.cz/diskuse/jak-ziskat-vsechny-zaznamy-s-unikatni-hodnou-v-jednom-sloupci-a-rozdilnymi-v-druhem/#reply1499583
takatom
verified
rating uzivatele
(2 hodnocení)
14. 3. 2022 12:11:51
select sku from tabulka where value in(3,4) group by sku having count(distinct value)=2
14. 3. 2022 12:11:51
https://webtrh.cz/diskuse/jak-ziskat-vsechny-zaznamy-s-unikatni-hodnou-v-jednom-sloupci-a-rozdilnymi-v-druhem/#reply1499582
TomasX
verified
rating uzivatele
(4 hodnocení)
14. 3. 2022 14:02:45
Napsal takatom;1641974
select sku from tabulka where value in(3,4) group by sku having count(distinct sku)=2
ten group by ti změní kardinalitu dat, count(distinct sku) bude jedna a where value in (3,4) chytne pouze jeden řádek, v případě mysql to bude ten první, tj. nejspíš 3.
Ve svém posledním příkazu mám řadu syntax erroru, píšu na mobilu, tak správná verze by měla vypadat nějak takhle (snad již bez chyb):
Případně s group_concat by to vypadalo nějak takhle:
14. 3. 2022 14:02:45
https://webtrh.cz/diskuse/jak-ziskat-vsechny-zaznamy-s-unikatni-hodnou-v-jednom-sloupci-a-rozdilnymi-v-druhem/#reply1499581
Pro odpověď se přihlašte.
Přihlásit