Autor | Zpráva | ||
---|---|---|---|
capricorn Profil |
#1 · Zasláno: 18. 4. 2011, 20:16:44
Zdravím, potřeboval bych poradit, jestli existuje lepší způsob, kterým vytáhnu z db řádky a ke každému řádku bude připojena maximální hodnota výsledku, aby došlo k dopočítání rozdílu. Níže uvedený dotaz se mně zdá zbytečně se opakující, jelikož první a druhý poddotaz se liší jen v tom, že ve druhém poddotazu je funkce MAX().
SELECT t1.*, t2.*, t2.value - t1.result AS diff FROM ( SELECT if(ROUND(p1.amount1 * 10000, 2) > ROUND(p1.top, 2), if(ROUND(p1.amount1_top * 10000, 2) > ROUND(p2.top, 2), ROUND(p1.amount1_top * 10000 / p2.amount2_top, 2), ROUND(p1.amount1_top * 10000 / p2.amount2, 2)), if(ROUND(p1.amount1 * 10000, 2) > ROUND(p2.top, 2), ROUND(p1.amount1 * 10000 / p2.amount2_top, 2), ROUND(p1.amount1 * 10000 / p2.amount2, 2))) AS result FROM vw_table AS p1 JOIN vw_table AS p2 ON p1.id = p2.id WHERE p1.code = 'E' AND p2.code = 'U') AS t1, ( SELECT MAX( if(ROUND(p1.amount1 * 10000, 2) > ROUND(p1.top, 2), if(ROUND(p1.amount1_top * 10000, 2) > ROUND(p2.top, 2), ROUND(p1.amount1_top * 10000 / p2.amount2_top, 2), ROUND(p1.amount1_top * 10000 / p2.amount2, 2)), if(ROUND(p1.amount1 * 10000, 2) > ROUND(p2.top, 2), ROUND(p1.amount1 * 10000 / p2.amount2_top, 2), ROUND(p1.amount1 * 10000 / p2.amount2, 2)))) AS value FROM vw_table AS p1 JOIN vw_table AS p2 ON p1.id = p2.id WHERE p1.code = 'E' AND p2.code = 'U') AS t2 |
||
Kajman_ Profil * |
#2 · Zasláno: 18. 4. 2011, 22:04:54
Můžete si na to vytvořit view, ale pochybuji, že to bude mít vliv na výkon. V jiných databázích by se na to dala použít syntaxe with (select max...) ale mysql ji nepodporuje.
|
||
Časová prodleva: 15 let
|
0