我尝试将Summoner表中名为SummonerName的列插入到Order表中。
它给我一个错误,说SummonerName是非聚合的。
我想让它像下面这样显示:
SummonerID OCC
94 5
1 4至:
SummonerName SummonerID OCC
Paul 94 5
George 1 4任何帮助都将不胜感激。
SELECT s.SummonerName, o.SummonerID, COUNT(o.SummonerID) AS 'OCC'
FROM Orders AS o
JOIN Summoner AS s
ON o.SummonerID = s.SummonerID
GROUP BY o.SummonerID
ORDER BY OCC;发布于 2015-12-04 08:45:49
您需要按您选择的所有非聚合进行分组:
SELECT s.SummonerName, o.SummonerID, COUNT(o.SummonerID) AS 'OCC'
FROM Orders AS o
JOIN Summoner AS s
ON o.SummonerID = s.SummonerID
GROUP BY o.SummonerID, s.SummonerName
ORDER BY OCC;或者添加一个窗口函数并删除您的group by
SELECT s.SummonerName, o.SummonerID, COUNT(o.SummonerID) over (partition by o.SummonerID) AS 'OCC'
FROM Orders AS o
JOIN Summoner AS s
ON o.SummonerID = s.SummonerID
ORDER BY OCC;发布于 2015-12-04 08:45:43
因为使用SQL时,GROUP BY中未列出的每个选定列都必须应用聚合函数。某些SQL server (如MySQL )不强制执行此操作,而是以静默方式选择一个值。您应该将SummonerName添加到GROUP BY,或者将聚合函数(如MIN或MAX )添加到选择字段列表中的SummonerName列。
发布于 2015-12-04 08:49:56
与使用GROUP BY o.summonerID的方式一样,新的“召唤师姓名”列必须是计算的结果(如MIN或MAX),或者位于GROUP BY子句中。
将o.SummonerName添加到GROUP by子句可能会得到您想要的结果:
SELECT s.SummonerName, o.SummonerID, COUNT(o.SummonerID) AS 'OCC'
FROM Orders AS o
JOIN Summoner AS s ON o.SummonerID = s.SummonerID
GROUP BY s.SummonerName, o.SummonerID
ORDER BY OCC;如果由于某些原因无法执行此操作,则可以将计算设为子选择,如下所示:
SELECT s.SummonerName, s.SummonerID, (SELECT COUNT(*) FROM Orders where SummonerID = s.SummonerID) AS 'OCC'
FROM Orders AS o
ORDER BY OCC;https://stackoverflow.com/questions/34078971
复制相似问题