MySQL:根据第二个表中的True和False的比率选择行
我有一个媒体文件表和第二个媒体文件评级表 我应该使用什么SQL语句从第一个表中选择第二个表中正负评级比率最高的媒体文件 下表包含与每个媒体文件相关的信息 表:媒体 如下表所示;媒体文件3的评级为2/3或66%,22的评级为1/2或50% 表:评级 如有任何帮助,我将不胜感激:我已获得:MySQL:根据第二个表中的True和False的比率选择行,mysql,sql,select,nested,Mysql,Sql,Select,Nested,我有一个媒体文件表和第二个媒体文件评级表 我应该使用什么SQL语句从第一个表中选择第二个表中正负评级比率最高的媒体文件 下表包含与每个媒体文件相关的信息 表:媒体 如下表所示;媒体文件3的评级为2/3或66%,22的评级为1/2或50% 表:评级 如有任何帮助,我将不胜感激:我已获得: SELECT media.mediaID, ( (SELECT COUNT(CASE WHEN rating =1 THEN 1 END ) Positive FROM ratings)
SELECT media.mediaID, (
(SELECT COUNT(CASE WHEN rating =1 THEN 1 END ) Positive FROM ratings)
/
(SELECT COUNT( mediaID ) FROM ratings )
) AS percent
FROM ratings, media
WHERE media.mediaID = ratings.mediaID
GROUP BY mediaID
此外,我觉得两个或多个媒体文件之间的正票数与总票数的比例可能是相等的。在这种情况下,我怎么能让MySQL只选一个呢?试试这个
select r.mediaid,
count(*) as total_rows,
sum(rating) as id_sum,
SUM(rating)/count(*) AS score
from rating r, media m
where r.mediaid=m.mediaid
group by r.mediaid
如果只想报告分数高于阈值(如0.75)的记录
然后添加having子句
select r.mediaid,
count(*) as total_rows,
sum(rating) as id_sum,
SUM(rating)/count(*) AS score
from rating r, media m
where r.mediaid=m.mediaid
group by r.mediaid
having score > .75
这里有一个演示
评论后
一种方法是按分数desc排序,然后限制为1条这样的记录
这里有一个在Oracle中工作的解决方案。它使用解析函数。然而,据我所知,MYSQL不具备这种能力。zundarz,谢谢你的回复。您的查询确实为每个mediaID提供了一个比率。您有没有建议如何将您的查询调整为只选择比率最高的行?我尝试将MAXSUMrating/count*作为分数,但出错了:我也尝试了使用MAXscore。
select r.mediaid,
count(*) as total_rows,
sum(rating) as id_sum,
SUM(rating)/count(*) AS score
from rating r, media m
where r.mediaid=m.mediaid
group by r.mediaid
select r.mediaid,
count(*) as total_rows,
sum(rating) as id_sum,
SUM(rating)/count(*) AS score
from rating r, media m
where r.mediaid=m.mediaid
group by r.mediaid
having score > .75
select r.mediaid,
count(*) as total_rows,
sum(rating) as id_sum,
SUM(rating)/count(*) AS score
from rating r, media m
where r.mediaid=m.mediaid
group by r.mediaid
order by score desc limit 1