Zadejte hledaný výraz...

Kombinace dotazu s GROUP BY i ORDER BY

David Musil
verified
rating uzivatele
(69 hodnocení)
11. 3. 2024 09:57:44
Ahoj,
lámu si hlavu a nemůžu se dopátrat výsledku: Potřebuju seznam řádků, kde jsou položky na skladech s ID 6 a 9 a zároveň potřebuji, aby pokud jsou na obou tak aby mělo ID 9 přednost.
Našel jsem tip, že si mohu pomoci umělým sloupečkem, ale ani tak jsem nebyl úspěšný. Ten GROUP BY mi to přebije vždycky.
Toto jsem našel:
SELECT id, item_id, brand_id, warehouse_id,price_jedn, max(warehouse_id) as max_warehouse_id FROM `warehouses_items` WHERE `item_id` = 893 AND `warehouse_id` IN (6,9) and brand_id=1 GROUP by item_id order by max_warehouse_id DESC
Tohle nefunguje:
SELECT id, item_id, brand_id, warehouse_id,price_jedn FROM `warehouses_items` WHERE `item_id` = 893 AND `warehouse_id` IN (6,9) and brand_id=1 GROUP by item_id order by warehouse_id DESC
Editováno 11. 3. 2024 09:58:50 uživatelem David Musil
11. 3. 2024 09:57:44
https://webtrh.cz/diskuse/kombinace-dotazu-s-group-by-i-order-by/#reply1526107
skorozacatecnik
verified
rating uzivatele
11. 3. 2024 13:45:58
Zkus chvíli podumat nad tímto SQL, možná ti to vyřeší uvedený problém s GROUP BY.
-- Najdes pozadovane radky podle item_id a warehouse_id (pripadne dalsich)
WITH testset AS (
     SELECT id, item_id, warehouse_id FROM test WHERE item_id = 11 AND warehouse_id IN (6,9)
)
-- Ke kazdemu item_id z testset ziskas maximalni warehouse_id
, maxset AS (
     SELECT item_id, MAX(warehouse_id) AS maxwid FROM testset GROUP BY item_id
)
-- Z testset selektujes pouze itemy s nejvyssim warehouse_id z maxsetu
SELECT t.* FROM testset AS t
LEFT JOIN maxset AS m ON (m.item_id = t.item_id)
WHERE t.warehouse_id = m.maxwid
11. 3. 2024 13:45:58
https://webtrh.cz/diskuse/kombinace-dotazu-s-group-by-i-order-by/#reply1526114
Pro odpověď se přihlašte.
Přihlásit