2015-12-04 2 views
0

Я вставляю колонку под названием SummonerName от Summoner Таблица к Order Таблица.sql aggregate без агрегата

Это дает мне ошибку, говоря, что 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; 
+1

Добавьте s.SummonerName в предложение GROUP BY. – Harsh

+1

спасибо !! Это было намного проще, чем я ожидал. – Yh1234

ответ

0

Потому что с SQL, каждый столбец выбран, не перечислены в GROUP BY должны иметь суммарную функцию, примененную к нему. Некоторые SQL-серверы, такие как MySQL, не применяют это и молча выбирают значение. Вы должны либо добавить SummonerName в GROUP BY, либо добавить агрегатную функцию, например MIN или MAX, в столбец SummonerName в списке полей SELECT.

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; 
0

Таким же образом вы используя GROUP BY o.summonerID, ваш новый столбец имен вызывающего абонента должен либо быть результатом вычисления (например, MIN или MAX), либо находиться в предложении GROUP BY.

Добавление o.SummonerName к GROUP пунктом, вероятно, получить, что вы ищете:

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; 
0

Я хотел бы добавить s.SummonerName в GROUP BY предложении:

GROUP BY o.SummonerID, s.SummonerName

Смежные вопросы