Неправильное использование групп по функциям, если считать в пределах суммы - PullRequest
0 голосов
/ 12 сентября 2018

У меня следующий запрос:

select H.UserID, N.LocatieID, N.Norm * COUNT(DISTINCT DATE(H.Starttijd)) AS 
Norm FROM Locatienorm N LEFT JOIN Uur H ON N.LocatieID = H.LocatieID GROUP BY 
H.UserID, N.LocatieID, N.Norm

Это дает мне следующий результат

enter image description here

Я хотел бы получитьрезультат:

6 1 0,56

6 4 0,96

Но при суммировании нормы я получаю ошибку:

недопустимое использованиесгруппировать по функциям

.

Вот так:

select H.UserID, 
       N.LocatieID, 
       SUM(N.Norm * COUNT(DISTINCT DATE(H.Starttijd))) AS 
Norm 
FROM Locatienorm N 
LEFT JOIN Uur H ON N.LocatieID = H.LocatieID 
GROUP BY 
H.UserID, N.LocatieID, N.Norm

Я что-то не так делаю или это просто не поддерживается?

Версия сервера: 10.1.31 MariaDB Server

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Такая функция агрегирования не будет работать.Но вы можете агрегировать в подзапрос, а затем агрегировать по результату во внешнем запросе.

Пример:

SELECT H.UserID, N.LocatieID, 
SUM(N.Norm * H.TotalDays) AS Norm 
FROM Locatienorm AS N
LEFT JOIN (
   SELECT
    LocatieID, UserID, 
    COUNT(DISTINCT DATE(Starttijd)) AS TotalDays 
   FROM Uur
   GROUP BY LocatieID, UserID
) AS H ON N.LocatieID = H.LocatieID
GROUP BY N.LocatieID, H.UserID

Вы можете протестировать его на rextester здесь

0 голосов
/ 12 сентября 2018

Вы не можете вложить групповые функции.Попробуй это скорее -

SELECT H.UserID
      ,N.LocatieID
      ,SUM(Norm)
FROM ( SELECT H.UserID
             ,N.LocatieID
             ,N.Norm * COUNT(DISTINCT DATE(H.Starttijd)) AS Norm 
       FROM Locatienorm N
       LEFT JOIN Uur H ON N.LocatieID = H.LocatieID
       GROUP BY H.UserID, N.LocatieID) A
GROUP BY H.UserID
        ,N.LocatieID
...