У меня есть 3 таблицы: пользователь, голос и песня.Использование нескольких операторов SQL внутри друг друга
песня содержит Песенка Vote содержит идентификатор песни, пользователь, кто голосовал и значение голосов пользователя содержит информацию о пользователе
Когда пользователь голосов на песню, их голос будет сохранен. Либо 1, либо 0. Каждая песня имеет жанр, который признается за голос.
То, что я пытаюсь сделать что-то вроде этого ...
Pop 1
Rock 3
Reggie 4
Vote percent is the total amount of 1s received so 1, 3, 4.
These as a % is my aim so Reggie would be 50%. (8/4) and so on...
I then want to use this list of prefered genres to pick songs based on the % values.
Так что, если есть какая-либо Реджи песня это будет возвращаемой первым в списке.
SELECT s.* FROM song s
WHERE (
SELECT 100.00 * SUM(CASE WHEN vote = '1' THEN 1 WHEN vote = '2' THEN 0.5
ELSE 0 END)/COUNT(v.vote) AS votePercent
FROM song s
LEFT JOIN collaborate c
ON s.song_id = c.song_id
LEFT JOIN voting v
ON s.song_id = v.song_id
WHERE v.user_id = 'user0d1c-944f-4fff-b819-16869750f2d4'
)
GROUP BY s.genre;
То, что я пытался до сих пор, кажется, от, как процентное значение выходит за 100% и 50% для жанров, а не в процентах от общего количества голосов.
Также мой текущий запрос почти наверняка вернет песни, которые уже были проголосованы.
Я пошла в неправильном направлении, или это имеет какое-то обещание для того, чего я надеюсь достичь?
Это выполнимо. Можете ли вы отредактировать сообщение, чтобы перечислить структуры таблиц (т.е. типы данных)? Благодарю. –