iT邦幫忙

0

MySQL集合函數條件問題

chan15 7 年前4078 瀏覽

假設有兩個table
結構如下

table a
a_id
a_label

table b
a_id
b_id
b_date

table b是用來紀錄table a的點擊率的
我想在同一個資料集拉出今天跟全部的點擊率
如果分開來下會是對的結果,但結合在一起下就會出問題
舉例來說,假設某筆資料總共有3個點擊數量
昨天一筆今天2筆

這樣會正確顯示出2筆

SELECT a.a_label, COUNT(b1.b_id) AS hitsToday
FROM a
LEFT JOIN b b1 ON b1.a_id = a.a_id AND DATEDIFF(b1.b_date, CURDATE()) = 0
GROUP BY a.a_id

這樣會正確顯示出3筆

SELECT a.a_label, COUNT(b2.b_id) AS hitsTotal
FROM a
LEFT JOIN b b2 ON b2.a_id = a.a_id
GROUP BY a.a_id

可是這樣會顯示出6筆…請問我哪邊下錯了?

SELECT a.a_label, COUNT(b1.b_id) AS hitsToday, COUNT(b2.b_id) AS hitsTotal
FROM a
LEFT JOIN b b1 ON b1.a_id = a.a_id AND DATEDIFF(b1.b_date, CURDATE()) = 0
LEFT JOIN b b2 ON b2.a_id = a.a_id
GROUP BY a.a_id

1 個回答

8
fillano
iT邦超人 1 級 ‧ 7 年前
最佳解答

從集合來看,第一個查詢應該是第二個查詢的子集,如果要使用count()的話,你應該用sub query而不是join。既然兩個集合的元素數量不一樣,你join之後count永遠無法得到各自的結果。

chan15 iT邦新手 5 級 ‧ 7 年前 檢舉

我知道可以用subqueries,但聽說subqueries滿耗資源,所以想說嘗試別的方式
但結果好像沒有辦法。

我要發表回答

立即登入回答