簡體   English   中英

左連接 - >聚合函數問題

[英]Left joins --> aggregate function problem

我的數據庫中有四個不同的表:

線:

  • thread_id單
  • thread_content
  • 時間戳

thread_rating:

  • thread_rating_id
  • thread_id單
  • 喜歡
  • 不喜歡的

thread_report:

  • thread_report_id
  • thread_id單

thread_impression:

  • thread_impression_id
  • thread_id單

我將使用此SQL-Query加入這些表

SELECT t.thread_id,
t.thread_content,
SUM(tra.liked) AS liked,
SUM(tra.disliked) AS disliked,
t.timestamp,
((100*(tra.liked + SUM(tra.liked))) / (tra.liked + SUM(tra.liked) + (tra.disliked + SUM(tra.disliked)))) AS liked_percent,
((100*(COUNT(DISTINCT tre.thread_report_id)) / ((COUNT(DISTINCT ti.thread_impression_id))))) AS reported_percent
FROM thread AS t
LEFT JOIN thread_rating AS tra ON t.thread_id = tra.thread_id
LEFT JOIN thread_report AS tre ON tra.thread_id = tre.thread_id
LEFT JOIN thread_impression AS ti ON tre.thread_id = ti.thread_id
GROUP BY t.thread_id
ORDER BY liked_percent

Query應該返回所有thread_id,其中包含計算出的喜歡和不喜歡的內容,以百分比表示的喜歡,時間戳,線程插入數據庫的時間以及報告的百分比(展示次數,時間,線程都顯示給用戶)。 ..

幾乎所有結果都是正確的,唯一不合適的結果是喜歡和不喜歡。

如果我在查詢前面加上一個count(*),我可以看到,正確的結果計數為1,錯誤的結果有時計數最多為60.看起來有交叉連接問題.. 。

我認為這是分組的問題,或者我應該接受聯接。

我見過帶有子選擇的解決方案。 但我認為這不是解決這個問題的好方法......

我在這做錯了什么?

tra表每個thread_id有多個記錄。 這導致SUM函數中的雙重計數。
在子選擇中進行求和,按連接字段分組。
這樣,你只需要在tra2有一個thread_id加入,並避免重復行。

SELECT t.thread_id,
  t.thread_content,
  tra2.liked
  tra2.disliked,
  t.timestamp,
  tra2.liked_percent,
  ((100*(COUNT(DISTINCT tre.thread_report_id)) / ((COUNT(DISTINCT ti.thread_impression_id))))) AS reported_percent
FROM thread AS t
LEFT JOIN (
     SELECT 
       tra.thread_id 
       , SUM(tra.liked) AS liked
       , SUM(tra.disliked) AS disliked
       , ((100*(tra.liked + SUM(tra.liked))) / (tra.liked + SUM(tra.liked) + (tra.disliked + SUM(tra.disliked)))) AS liked_percent 
     FROM thread_rating AS tra
     GROUP BY tra.thread_id
) as tra2 ON t.thread_id = tra2.thread_id
LEFT JOIN thread_report AS tre ON tra.thread_id = tre.thread_id
LEFT JOIN thread_impression AS ti ON tre.thread_id = ti.thread_id
GROUP BY t.thread_id
ORDER BY liked_percent DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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