Пожалуйста,
Я пытаюсь получить некоторую общую ценность полученных пользователями баллов в нескольких отличительных подсчетах, но все из одной таблицы.
SQL:
SELECT o.author_id, SUM(o.vote_value) AS vote_value, n.best AS best_sum,
(SUM(o.vote_value) + (10 * n.best)) AS total
FROM comments o
LEFT JOIN (
SELECT COUNT(best) AS best, author_id
FROM comments
WHERE best = 1
GROUP BY author_id
) n ON o.author_id = n.author_id
GROUP BY o.author_id
ORDER BY total DESC
LIMIT 0, 4
Проблема в том, что нет BEST (по умолчанию 0, а лучше 1). Я ничего не получаю для "total" и "best_sum". Мне нужно 0, если у пользователя нет "наилучшего", так что вычисление может быть выполнено правильно
Извините, мой плохой английский, я думаю, вы поймете Благодаря
Я думаю, ваша проблема в том, что вы отфильтровываете строки, где лучше всего не 1, поэтому они не включены в группу. Попробуйте следующее:
SELECT o.author_id, SUM(o.vote_value) AS vote_value, n.best AS best_sum,
(SUM(o.vote_value) + (10 * n.best)) AS total
FROM comments o
JOIN (
SELECT SUM(best) AS best, author_id
FROM comments
GROUP BY author_id
) n ON o.author_id = n.author_id
GROUP BY o.author_id
ORDER BY total DESC
LIMIT 0, 4
Кроме того, может быть, я чего-то не хватает, но не будет ли это работать, сохраняя подзапрос?
SELECT o.author_id, SUM(o.vote_value) AS vote_value, SUM(o.best) AS best_sum,
(SUM(o.vote_value) + (10 * SUM(o.best))) AS total
FROM comments o
GROUP BY o.author_id
ORDER BY total DESC
LIMIT 0, 4
Я предполагаю, что вы хотите иметь значение 0, если best = NULL попробуйте COALESCE
count(COALESCE(best,0) AS best)
Вы должны использовать COALESCE (n.best, 0)
COALESCE возвращает второй параметр, когда первый имеет значение NULL
SELECT o.author_id, SUM(o.vote_value) AS vote_value,
COALESCE(n.best, 0) AS best_sum,
(SUM(o.vote_value) + (10 * COALESCE(n.best, 0))) AS total
FROM comments o
LEFT JOIN (
SELECT COUNT(best) AS best, author_id
FROM comments
WHERE best = 1
GROUP BY author_id
) n ON o.author_id = n.author_id
GROUP BY o.author_id
ORDER BY total DESC
LIMIT 0, 4