簡體   English   中英

MySQL如何計算左連接的where子句只用於count?

[英]MySQL how to count in a left join with where clause only for count?

我有這兩個表: ritter(ritterId, ritterName)quest(questID, ritterID, datum)

現在我的問題是,如何通過一個額外的列顯示來自ritter的所有內容,該列顯示本周ritter的任務數量?

我試過這個:

select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID group by r.ritterID;

這有效,但沒有本周的原因。

如果我這樣做: select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID where weekofyear(datum) = weekofyear(now()) group by r.ritterID;

然后它只顯示在本周執行任務的ritter但是我想它顯示所有的ritter。

輸出:

怎么樣:

在此輸入圖像描述

怎么樣:

在此輸入圖像描述

表ritter:

在此輸入圖像描述

和表任務:

在此輸入圖像描述

我怎么解決這個問題?

我希望你能理解我的意思和想要的東西。 對不起我的英語不好。

您必須在左連接中包含日期條件。

select r.*, count(q.ritterID) 
from ritter as r 
left join quest as q on r.ritterID = q.ritterID 
    AND weekofyear(datum) = weekofyear(now()) 
group by r.ritterID;

您離解決方案不遠,只需將日期過濾器從where條件移動到連接條件即可。 這樣它只適用於連接右側的表,而不是整個結果集:

select r.*, count(q.ritterID)
from ritter as r left join quest as q
   on r.ritterID = q.ritterID and weekofyear(datum) = weekofyear(now())
group by r.ritterID

由於ritter名稱在功能上依賴於ritter id,因此您的查詢在最新版本的MySQL上會很好。 但是,在舊版本中,如果設置了only_full_group_by sql模式,則可能會遇到麻煩。 因此,將r.ritterName添加到group by子句可能更好。

暫無
暫無

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

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