Написать SQL-запрос, который вернёт имена топ 10 авторов отзывов, комментарии под которыми собрали наибольшее количество лайков
У вас есть две таблицы: review и user.
Таблица review:
- id: уникальный идентификатор отзыва/комментария.
- user_id:идентификатор автора отзыва/комментария.
- content: содержание отзыва/комментария.
- likes_count: количество лайков у отзыва/комментария.
- dislikes_count: количество дизлайков у отзыва/комментария.
- parent_id: если значение не null, это комментарий, и значение указывает на идентификатор родительского отзыва.
- item_name: название товара, на который оставлен отзыв/комментарий. created_at: дата создания записи.
Таблица user:
- id: уникальный идентификатор пользователя.
- name: имя пользователя.
Мне необходимо написать SQL-запрос, который вернёт имена топ 10 авторов отзывов, комментарии под которыми собрали наибольшее количество лайков (без учёта дизлайков), и сумму лайков на комментариях под отзывами автора. Результат должен содержать 2 колонки в следующем порядке:
name: содержит имя автора отзывов total_likes: содержит сумму лайков на комментариях под отзывами автора
Я написал вот такой запрос, но он не проходит тест. Помогите его исправить
SELECT user.name AS name, SUM(r.likes_count) AS total_likes FROM review r
JOIN user ON r.user_id = user.id
LEFT JOIN review ON review.parent_id = r.id
WHERE review.parent_id IS NULL
GROUP BY r.parent_id, r.id, r.user_id, r.content, r.likes_count, r.dislikes_count, r.item_name, r.created_at
ORDER BY total_likes DESC LIMIT 10
Ответы (2 шт):
Такое решение подойдет? sqlfiddle.com для тестов не стал заводить лишние поля, которые не используются. В предыдущем решении вы получили ошибку check the manual that corresponds to your MySQL server version for the right syntax to use near 'nulls last LIMIT 10' at line 10, это значит, что у вас неподдерживается конструкция nulls last, здесь я ее убрал
SELECT
u.name AS name
, SUM(r1.likes_count) AS total_likes
FROM user_table u
JOIN review r
ON r.user_id = u.id
LEFT JOIN review r1
ON r1.parent_id = r.id
GROUP BY u.id, u.name
having SUM(r1.likes_count) is not null
ORDER BY total_likes DESC
LIMIT 10
Не понимаю почему в http://sqlfiddle.com/ выводит всё нормально, а на степике вот так: [1]: https://i.stack.imgur.com/zfCHI.jpg