Autor Zpráva
capricorn
Profil
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 *
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.

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: