2017-10-10 104 views
1

我有一個數據庫表「tblfavs」與五列:id,userid,logoid,favdate,did。MySQL選擇百分比

我想確定共享相同設計器ID(做)的用戶(用戶ID)收藏夾(ID)的百分比,以及用戶ID從最高百分比到最低百分比顯示的百分比。

在僞查詢格式:

SELECT [percentage], userid, did 
FROM tblfavs 
WHERE record has the same userid and did 
AND userid <> did 
GROUP BY userid 
ORDER BY [percentage] DESC 

我不能讓我的周圍的查詢頭做到這一點。幫助讚賞!

編輯:

樣本數據

1, 1, 5, 2017-01-01, 2 
2, 7, 3, 2017-01-02, 5 
3, 1, 8, 2017-01-02, 2 
4, 7, 1, 2017-01-02, 3 

在這組用戶1(第二列)具有兩個條目並且兩者都具有 「2」 作爲設計者ID(最後一欄)。

預期輸出

100%, userid 1, did 2 
50%, userid 7, did 5 
50%, userid 7, did 3 
etc. 
+0

你能分享一些示例數據和你想要的結果(從以前的答案改進,以滿足您的具體投入,所以你不agregated每一行獲得%)去爭取它?這將使我們更容易地爲您提供幫助 – Mureinik

+1

向我們展示數據庫模式,樣本數據,當前和期望的輸出。 \t請閱讀[**如何提問**](http://stackoverflow.com/help/how-to-ask) \t \t這裏是一個偉大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)來了解如何提高您的問題質量並獲得更好的答案。 \t [**如何創建最小,完整的,並且可驗證示例**](http://stackoverflow.com/help/mcve) \t嘗試在http://rextester.com創建一個示例 –

+0

樣品數據和預期產出增加,希望這是你的想法。 – blogo

回答

3

這是在其中設有窗口函數(例如COUNT OVER)其他DBMS更容易。但是,這在MySQL中也不是那麼困難。你只需要兩個聚合:計數每useriddid,計數每userid,除。

select 
    ud.cnt * 100.0/u.cnt as percentage, 
    ud.userid, 
    ud.did 
from 
(
    select userid, did, count(*) as cnt 
    from tblfavs 
    group by userid, did 
) ud 
join 
(
    select userid, count(*) as cnt 
    from tblfavs 
    group by userid 
) u on u.userid = ud.userid 
order by percentage desc; 
+0

我很敬畏。在我的世界裏,這是一個怪物查詢。謝謝。 – blogo

-1

試試這個

select 
    ud.cnt2 * 100.0/u.cnt as percentage, 
    ud.userid, 
    ud.did 
from 
(
    select 
     out3.userid,out3.did, cnt2 
    from 
     (select userid,did from tblfavs) out3 
    join 
    (
     select 
     userid, did, count(*) as cnt2 
     from tblfavs 
     group by userid, did 
    ) ud on ud.userid = out3.userid and ud.did = out3.did 
) ud 
join 
(
    select userid, count(*) as cnt 
    from tblfavs 
    group by userid 
) u on u.userid = ud.userid 
order by percentage desc;