Intereting Posts
jquery ajax post – как вернуть данные? проверьте, существует ли изображение php Строка PHP для вложенного / многомерного массива цитируя константы в php: «это MY_CONSTANT» Как подавать данные серии, которые имеют значения оси х и y в линейных диаграммах? Отображение состояния сообщения: чтение и непрочитанное (отличается от других пользователей) в системе обмена сообщениями PHP / MySQL pcntl_fork и соединение MySQL ушло Как прекратить отправку сообщений в mysql, если база данных содержит определенный идентификатор? Почему PHP подходит для сайтов с высоким трафиком? Лучшие рекомендации: какой лучший способ для создания верхних и нижних колонтитулов? PHP-разработки? Codeigniter + GoCart CMS + Dreamhost (Shared Hosting) говорит: «Невозможно найти указанную модель …» Как определить, стати я или объект? magento перенаправляет на другой субдомен, основанный на cookie, в трёхмерном трюке Изменение класса выполнения PHP

Sum, Case, Union, Group by: Php Mysql

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