У меня есть следующий запрос:MySQL ошибка синтаксиса: неожиданный «уникальный»
select u.UserName, count(*) as total
from Voting v join User u using (UserID)
where unique (select s.AlbumID, s.Number from Song s where s.AlbumID=v.AlbumID and s.Number=v.Number)
group by u.UserName
order by total desc;
Это, как предполагается сделать следующее: для каждого пользователя, отображается имя пользователя и количество песен пользователя на голосование. Без линии where unique (...)
это отлично работает, но я хочу, чтобы голоса по одной и той же песне не считались как несколько голосов, и я не совсем уверен, как это сделать, потому что эта строка создает синтаксическую ошибку (и мой учебник говорит вы можете сделать это так :-)).
Схема выглядит следующим образом:
table Album(AlbumID(PK), AlbumName)
table Song((Number,AlbumID)(PK), SongName)
table User(UserID(PK), UserName)
table Voting((UserID,AlbumID,Number)(PK),Vote,Date)
Но в моем случае песня определяется как AlbumID, так и номером на этом альбоме. Если я правильно понял, это не учитывает голоса песен с одинаковым номером на разных альбомах. Могу ли я использовать * distinct * для обоих AlbumID и Number? Что-то вроде * count (отдельный v.Number, v.AlbumID) *? постскриптум * Голосовать * - это номер :) – Eutherpy
можете ли вы разместить некоторые данные образца или настроить скрипт sql? использование 'count (отдельный v.Number, v.AlbumID)' недопустимо. –
На самом деле я понял, что пользователь ** не может ** голосовать за одну и ту же песню несколько раз из-за ПК в * Голосование *: D Итак, я думаю, у меня нет проблемы. Но все же вы помогли с подсчетом * (отличным ...) *. – Eutherpy