我想将SummonerName
表中名为Summoner
的列插入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;
答案 0 :(得分:1)
您需要按照您选择的所有非聚合分组:
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;
答案 1 :(得分:0)
因为使用SQL,所选的每个未在GROUP BY中列出的列都必须应用聚合函数。某些SQL服务器(如MySQL)不会强制执行此操作并静默选择一个值。您应该将SummonerName添加到GROUP BY,或者将一个聚合函数(如MIN或MAX)添加到SELECT字段列表中的SummonerName列。
答案 2 :(得分:0)
与使用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;
答案 3 :(得分:0)
我会将s.SummonerName添加到GROUP BY子句中:
GROUP BY o.SummonerID,s.SummonerName