выберите порядок записей по полю и получите группу SUM по тому же полю - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь получить записи, упорядоченные по полю, скажем, по проекту, а также рассчитать некоторые поля, сгруппированные по тому же полю.

Например,

Project    |    Worked By      |    Hours
------------------------------------------------
Data Entry |    Rakesh Malakar |    40.0
Data Entry |    Najar Man      |    25.0
                               |    65.0
Editing    |    Henry Bdr.     |    20.0
Editing    |    Jack Pd.       |    15.5
                               |    35.5

У меня есть похожие данныеустановить в базе данных.Все, что мне нужно, это просто сумма, сгруппированная по полю project.

Я попробовал запрос:

SELECT project, user as worked_by, hours, SUM(hours) as project_sum_hours
FROM project_hours
ORDER BY project
GROUP BY project

Запрос возвращает только агрегированную запись для каждого поля project.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Я думаю, вам может понадобиться UNION ALL, чтобы получить результаты, как вы хотите:

SELECT project, user as worked_by, SUM(hours) as project_sum_hours
FROM project_hours
GROUP BY project, user
UNION ALL
SELECT project, NULL, SUM(hours) as project_sum_hours
FROM project_hours
GROUP BY project
ORDER BY project, (worked_by IS NULL) DESC;

ROLLUP удобно, но будет производить больше строк, чем вы хотите.А MySQL (пока?) Не поддерживает GROUPING SETS.

0 голосов
/ 04 октября 2018

Вы можете использовать WITH ROLLUP для вычисления суперагрегатов.

Попробуйте выполнить следующее:

SELECT project, 
       user as worked_by, 
       SUM(hours) as hours 
FROM project_hours
GROUP BY project, worked_by WITH ROLLUP
...