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