Autor Zpráva
Toníček
Profil *
Zdravím,

Přemýšlím nad jedním SQL - potřebuji porovnat cenu objednávky s platbou a vypsat pouze uhrazené objednávky.
Ovšem cenu objednávky zjistím z tabulky objednanch produktů a přijatou částku zase z tabulky plateb.
Ve zkratce to asi pochopite, co chci vymyslet z tohoto sql:
To mi ovšem vrací ( Unknown column 'celkemPlatba' in 'where clause' )

SELECT ord.*, SUM(objednane.cena)) as cenaObjednavky, SUM(pl.castka) as celkemPlatba FROM objednavky obj
LEFT JOIN objednavky_produkty objednane ON obj.id=objednane.objednavka_id
LEFT JOIN platby pl ON obj.vs=pl.vs 
WHERE pl.zruseno=0 AND celkemPlatba>=cenaObjednavky AND obj.datum>...
ORDER BY obj.id DESC

objednane.cena = cena produktu
pl.castka = prijata castka
SUM je protože jich může být více a potřebuji sečíst všechny položky.
Kajman
Profil
Podmínka na agregované funkce patří do having, ale stejně to nebude fugnovat. Když uděláte joiny na více tabulek, které mohou odpovídat více řádky, tak by se to celé násobilo a součty nebudou sedět.

Zkuste použít korelované poddotazy. Něco jako

SELECT t.*
FROM   (SELECT obj.*,
               (SELECT Sum(objednane.cena)
                FROM   objednavky_produkty objednane
                WHERE  obj.id = objednane.objednavka_id) AS cenaObjednavky,
               (SELECT Sum(pl.castka)
                FROM   platby pl
                WHERE  obj.vs = pl.vs
                       AND pl.zruseno = 0)               AS celkemPlatba
        FROM   objednavky obj
        WHERE  obj.datum >= Date('2017-01-01')) t
WHERE  celkemPlatba >= cenaObjednavky
ORDER BY t.id DESC

Kdyby to s nimi bylo moc pomalé, teprve bych to zkusil přepsat jinak.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0