MySQL Group-By запрос - PullRequest
       11

MySQL Group-By запрос

0 голосов
/ 15 февраля 2019

У меня есть следующий рабочий скрипт MySQL:

SELECT CAT.LCDescript as Category, 
       Labor.CAT, 
       Labor.LabDescript As Task, 
       ProjLab.PLqty As Qty,
       ProjLab.Plucost As UnitCost, 
       ProjLab.PLqty*ProjLab.Plucost as TotalCost
FROM `ProjLab` 
INNER JOIN Labor ON ProjLab.Lid = Labor.Lid
INNER JOIN CAT ON Labor.CAT = CAT.LCid
WHERE Pid=1
ORDER BY Category, Task ASC

Это дает мне правильный список задач по описанию категории и описанию задачи.Я хотел бы видеть итоги для каждой категории "TotalCost", а также итоговые итоги.Попытка добавления группы по категории, но это не удается.Нужно ли добавлять Group By Category после Where, но это просто дало мне по одной строке для каждой Категории.Да, я знаю, что это, вероятно, то, что он должен делать, но я хотел, чтобы все записи И резюме по категориям и в идеале общая стоимость в конце?Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Спасибо csaisEdge.Это дало мне часть решения с суммой (кол-во * цена).Я хотел получить общее количество каждой категории, а также общее количество, а также отдельные записи из «ProjLab».Я пытался использовать «WITH ROLLUP», но получал синтаксическую ошибку.В итоге я использовал два СОЮЗА, один для промежуточных итоговых сумм и один для общего итога, как показано ниже.Нет сомнений в гораздо лучшем решении, возможно, «С ROLLUP» ??

-- this part gives all Projlab records
SELECT CAT.LCDescript Category, 
       Labor.LabDescript Task, 
       ProjLab.PLqty Qty,
       ProjLab.Plucost UnitCost,
       sum(ProjLab.PLqty*ProjLab.Plucost ) as TotalCost
FROM `ProjLab` 
INNER JOIN Labor ON ProjLab.Lid = Labor.Lid
INNER JOIN CAT ON Labor.CAT = CAT.LCid
WHERE Pid=1
GROUP BY Category, Task  
UNION
-- this part adds the category totals
SELECT CAT.LCDescript Category, 
       "_total" Task, 
       ProjLab.PLqty Qty,
       ProjLab.Plucost UnitCost,
       sum(ProjLab.PLqty*ProjLab.Plucost ) as TotalCost
FROM `ProjLab` 
INNER JOIN Labor ON ProjLab.Lid = Labor.Lid
INNER JOIN CAT ON Labor.CAT = CAT.LCid
WHERE Pid=1
GROUP BY Category 
UNION
-- this part give the grand total
SELECT  "__ total" AS Category, 
       "__" Task, 
       "__"  Qty,
       "__"  UnitCost,
       sum(ProjLab.PLqty*ProjLab.Plucost ) as TotalCost
FROM `ProjLab` 
INNER JOIN Labor ON ProjLab.Lid = Labor.Lid
INNER JOIN CAT ON Labor.CAT = CAT.LCid
WHERE Pid=1
GROUP BY Category 
ORDER BY Category, Task ASC
0 голосов
/ 15 февраля 2019

Если вам нужна сумма по TotalCost, вам нужна группировка по сумме и сумме, но в этом случае вы не должны выбирать значения для qty и unitCost
или использовать агрегированную функцию для этих столбцов

    SELECT CAT.LCDescript as Category, 
           Labor.CAT, 
           Labor.LabDescript As Task, 
           sum(ProjLab.PLqty*ProjLab.Plucost ) as TotalCost
    FROM `ProjLab` 
    INNER JOIN Labor ON ProjLab.Lid = Labor.Lid
    INNER JOIN CAT ON Labor.CAT = CAT.LCid
    WHERE Pid=1
    GROUP BY Category, Labor.CAT,Task   
    ORDER BY Category, Task ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...