簡體   English   中英

MySQL:基於第二表中True-False比率的SELECT行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM