Мне нужно получить список: «сколько пользователей» отдали «сколько голосов». В нашем случае у каждого пользователя есть лимит в 10 голосов. Итоговая таблица должна выглядеть так:
Количество голосов
Количество пользователей
10
25
9
32
8
43
(и так далее)
В моём первом запросе SQL я зашёл так далеко:
SELECT user_id, count(user_id)
FROM discourse_voting_votes
GROUP BY user_id
ORDER BY count DESC
Это выводит список пользователей, отсортированный по количеству отданных голосов. С помощью этого я могу вручную рассчитать нужный результат, но это утомительно и чревато ошибками.
Боюсь, это тоже мой первый SQL-запрос, так что посмотрим, как всё получится… но это хоть чем-то поможет?
WITH votes AS (
SELECT user_id, count(user_id) as Number_of_Votes
FROM discourse_voting_votes dvv
WHERE dvv.archive = false
GROUP BY user_id
ORDER BY Number_of_Votes DESC
)
SELECT Number_of_Votes, count(*) AS Number_of_Users
FROM votes
GROUP BY Number_of_Votes
ORDER BY Number_of_Votes DESC
Отлично! Большое спасибо за скрипт и небольшой урок по SQL! Надеюсь, это было полезно и для вас.
Уверен, этот запрос пригодится и другим. В нашем случае мы хотим показать такое распределение голосов, чтобы наши волонтёры лучше осознавали, насколько много или мало они используют свои голоса по сравнению с другими коллегами. Конечная цель — увеличить количество использованных голосов.
Я очень рад, что всё сработало. Я давно хотел потренироваться с Data Explorer, и это казалось идеальной возможностью, так что на самом деле благодарить должен я вас.
Я добавил строку ‘archive = false’, чтобы ограничить результаты текущим общим количеством голосов пользователя и не включать исторические данные. Думаю, это подходит для вашего случая, но удалите её, если вам нужна «общая сумма».