[英]MySQL: SELECT Row Based on Ratio of True to False in Second Table
我有一個媒體文件表和第二個媒體文件評級表。
我應該使用什么SQL語句從第一個表中選擇第二個表中具有最高正負比率的媒體文件?
下表包含與每個媒體文件相關的信息。
表:“媒體”
| mediaID |
-----------
| 3 |
| 22 |
鑒於下表; 媒體文件#3的評級為2/3或66%,#22的評級為1/2或50%。
表:“評級”
| mediaID | rating |
--------------------
| 3 | 1 |
| 3 | 1 |
| 3 | 0 |
| 22 | 1 |
| 22 | 0 |
任何幫助將不勝感激:)我已經得到了:
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
這是一個演示SQL小提琴
評論后
一種方法是按分數desc排序,然后限制為1條記錄,如SQL Fiddle#2
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.