SQL GROUP_CONCAT + SUM + AVG - PullRequest
0 голосов
/ 31 мая 2009
SELECT *,
       Group_concat(rating) AS rating_total,
       Sum(rating_total)    AS rating_sum,
       Avg(rating_sum)      AS rating_avg
FROM   ratings
GROUP  BY pid  

По какой-то причине сумма и среднее не выполняются .... как вы заставляете этот оператор работать?

Ответы [ 2 ]

5 голосов
/ 31 мая 2009

Из-за способа, которым SQL компилирует запросы (я полагаю, MySQL, так как вы используете GROUP_CONCAT), вы не можете ссылаться на псевдонимы столбцов перед предложением order by. Функции SUM и AVG не являются процедурными . Они сделаны параллельно. Это означает, что они не могут быть зависимыми.

Во-вторых, GROUP_CONCAT возвращает строку, а не число. Как вы надеетесь, что СУММ / AVG? Просто СУММА и AVG колонка рейтинга сама по себе.

Теперь, учитывая это, вы можете сделать:

SELECT
    pid,
    GROUP_CONCAT(rating) AS rating_total,
    SUM(rating) as rating_sum,
    AVG(rating) as rating_avg
FROM
    rating
GROUP BY
    pid

Это должно дать вам то, что вы ищете.

0 голосов
/ 31 мая 2009

GROUP_CONCAT возвращает строку, объединяющую все выбранные значения. Затем вы пытаетесь суммировать эту строку, а затем пытаетесь получить среднее значение суммы.

Я думаю, вам нужно использовать SUM и AVG для значений из таблицы, а не для результата объединения.

...