在sum中计数时groupby函数的使用无效

bybem2ql  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(422)

我有下一个问题:

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

它给了我下一个结果

我想得到结果:
6 1 0.56
6 4 0.96
但是当我求和标准值时,我得到了一个错误:
group by函数的使用无效
.
就像这样:

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

cu6pst1q

cu6pst1q1#

不能嵌套组函数。试试这个-

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
qnyhuwrf

qnyhuwrf2#

这样的嵌套聚合函数是行不通的。但您可以在子查询中进行聚合,然后在外部查询中对结果进行聚合。
例子:

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

你可以在这里测试它

相关问题