Этот запросSUM (DISTINCT (колонка)) дает неверные результаты при определенных условиях
SELECT u.username,
SUM(p.likes) AS likePoints1,
SUM(p2.likes)*2 AS likePoints2
FROM users as u
LEFT JOIN (SELECT recommendedByUserId as rid, id as ruid from users WHERE created >= DATE('2013-09-16') AND created <= DATE('2013-09-30')) AS r ON r.rid = u.id
LEFT JOIN (SELECT * FROM posts WHERE created >= DATE('2013-09-16') AND created <= DATE('2013-09-30')) AS p ON p.author_id = ruid
LEFT JOIN (SELECT * FROM posts WHERE created >= DATE('2013-09-16') AND created <= DATE('2013-09-30')) AS p2 ON p2.author_id = u.id
GROUP BY u.id
дает неправильные результаты на колонке "likePoints2" Хотя это
SELECT u.username,
SUM(p2.likes)*2 AS likePoints2
FROM users as u
LEFT JOIN (SELECT * FROM posts WHERE created >= DATE('2013-09-16') AND created <= DATE('2013-09-30')) AS p2 ON p2.author_id = u.id
GROUP BY u.id
совершенно правильно.
Проблема в том, что мне нужно подвести итог всех сообщений.likes на posts.author_id = current u.id в течение заданного диапазона дат.
Буду признателен за любые вводные данные!
ТЕСТ-ДАННЫХ
ПОЛЬЗОВАТЕЛИ
id | recommendedByUserId
1 | 3
2 | 3
3 | NULL
4 | 1
ПОСТЫ
author_id | likes
1 | 5
3 | 2
4 | 1
Таким образом, в приведенном выше примере, результат должен быть:
userid | recommPoints | likePoints1 | likePoints2
1 | 10 | 1 | 10
2 | NULL | NULL | NULL
3 | 20 | 5 | 4
4 | NULL | NULL | 2
Что неправильно результаты вы получаете? –
Вы попробовали «правое внешнее соединение?»? Вы также можете напрямую присоединиться к таблицам, используя предложение where этих подзапросов как дополнительное условие для предиката соединения (возможное усиление производительности). – Sam
@GoatCO SUM слишком высок, не могу сказать, откуда он. –