SUM CASE, не показывающий правильные данные
Пример даты:
ниже приведены данные с группой prdid
wghvalue prdid addby cutequl 0.4 57546 me 1 0.6 71256 me 1 0.2 68754 me 1
ниже приведены данные, когда я удаляю группу prdid
wghvalue prdid addby cutequl 0.1 57546 me 1 0.1 57546 me 1 0.2 57546 me 1 0.1 71256 me 1 0.5 71256 me 1 0.2 68754 me 1
одна странная вещь:
в приведенных выше данных выборки
prdb.order cutid.order 2 2 3 2 4 4
поэтому, если я пишу запрос
prdb.order – cutid.order как newval
я получаю значение как … 2-2 = 0, 3-2 = 1, 4-4 = 0
но то же самое для
sum (случай, когда prdb.order – cutid.order = 0, затем 1 else 0 end) как newval
получить значение, как … 3, 2, 1
я думаю, что значение bove 3,2,1 не получается группой prdid
ниже запрос
SELECT sum(t1.count) as count, sum(t1.wghvalue) as wghvalue, t1.addby, SUM(t1.cutequl) as cutequl FROM (SELECT COUNT(pl.id) as count, SUM(pl.wghvalue) as wghvalue addby, SUM(CASE WHEN prdb.cutaname = cutid.cutname AND prdb.order = cutid.order AND prdb.order - cutid.order = 0 THEN 1 else 0 end) as cutequl FROM product AS prod LEFT JOIN producta AS prda ON prod.id = prda.id LEFT JOIN prdoctb AS prdb ON prod.pid = prda.pid LEFT JOIN ( SELECT id, wghvalue, addby, prdid FROM prdentrya WHERE 1=1 GROUP BY prdid UNION SELECT id, wghvalue, addby, prdid FROM prdentryb WHERE 1=1 GROUP BY prdid ) AS pl ON( pl.prdid = prda.prdid ) LEFT JOIN cut AS cutid ON prdb.cutaname = cutid.cutname WHERE pl.aadby = 103 GROUP BY pl.prdid ORDER BY pl.prdid ASC, pl.aadby ASC ) t1 group by t1.addby
Результат, полученный из запроса выше:
count | wghvalue | addby | cutequl 3 | 1.2 | me | 6
Что я должен получить, как показано ниже
count | wghvalue | addby | cutequl 3 | 1.2 | me | 3
Я думаю, что GROUP BY prdid не работает в суммарном случае, как я могу включить это в суммарном случае.
благодаря
Сначала попробуйте сохранить результат в таблице temp. Затем используйте операцию SUM на нем.
CREATE TEMPORARY TABLE IF NOT EXISTS TempTemp AS ( SELECT COUNT(pl.id) as count, SUM(pl.wghvalue) as wghvalue addby, SUM(CASE WHEN prdb.cutaname = cutid.cutname AND prdb.order = cutid.order AND prdb.order - cutid.order = 0 THEN 1 WHEN prdb.order is null or prdb.cutaname is null THEN 1 else 0 end) as cutequl FROM product AS prod LEFT JOIN producta AS prda ON prod.id = prda.id LEFT JOIN prdoctb AS prdb ON prod.pid = prda.pid LEFT JOIN ( SELECT id, wghvalue, addby, prdid FROM prdentrya WHERE 1=1 GROUP BY prdid UNION SELECT id, wghvalue, addby, prdid FROM prdentryb WHERE 1=1 GROUP BY prdid ) AS pl ON( pl.prdid = prda.prdid ) LEFT JOIN cut AS cutid ON prdb.cutaname = cutid.cutname WHERE pl.aadby = 103 GROUP BY pl.prdid ORDER BY pl.prdid ASC, pl.aadby ASC ) SELECT sum(t1.count) , sum(t1.wghvalue) ,t1.addby,SUM(t1.cutequl) , From TempTemp t1 group by addby