我有以下查询:
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)
最佳答案
您需要计算用户投票的相册中的不同数字。为此,还要加入歌曲表。
唯一不清楚的是,您如何知道用户是否对歌曲进行了投票?投票是是/否
栏吗?如果是这样,您可能必须更改聚合。
select u.UserName, count(distinct v.Number) as total
--count(distinct case when v.vote = 'yes' then 1 end) as total
--use this if vote is a yes/no column.
from Voting v
join `User` u on u.userid=v.userid
join Song s on s.AlbumID=v.AlbumID and s.Number=v.Number
group by u.UserName
order by total desc
关于MySQL语法错误: unexpected 'unique' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39774528/