[英]Wrong use of inner join function / group function?
我的查詢存在以下問題:
我有兩個表:
由customer.id = subscriber.customer_id鏈接在一起
在訂戶表中,我有id_customer = 0的記錄(這些是電子郵件記錄,沒有完整的客戶帳戶)
現在,我想顯示我每天有多少客戶,有id_customer的訂閱者有多少,以及有id_customer = 0的訂閱者有多少(電子郵件,我打電話給他們)
不知何故,我無法獲得那些電子郵件。 也許與不使用正確的聯接類型有關。 當我使用左聯接時,我得到的客戶數量合適,但電子郵件數量卻不正確。 當我使用內部聯接時,我得到的客戶數量錯誤。 我是否正確使用分組功能? 我認為這與此有關。
這是我的查詢:
` SELECT DATE(c.date_register),
COUNT(DISTINCT c.id) AS newcustomers,
COUNT(DISTINCT s.customer_id) AS newsubscribedcustomers,
COUNT(DISTINCT s.subscriber_id AND s.customer_id=0) AS emailonlies
FROM customer c
LEFT JOIN subscriber s ON s.customer_id=c.id
GROUP BY DATE(c.date_register)
ORDER BY DATE(c.date_register) DESC
LIMIT 10
;`
我不確定,但我認為在DISTINCT s.subscriber_id AND s.customer_id=0
,它在DISTINCT
之前運行AND
,因此DISTINCT
只會看到DISTINCT s.subscriber_id AND s.customer_id=0
。
你為什么不隨便拿
COUNT(DISTINCT s.subscriber_id) - (COUNT(DISTINCT s.customer_id) - 1)?
(-1存在,因為DISTINCT s.customer_id
將計數為0。)
知道了,唯一的風險是如果這一天沒有客戶,那么我就不會收到電子郵件,這是因為左加入。 但這一項有效:
選擇customer.regdatum,customers.customersqty,subscribers.emailonlies
FROM((選擇DATE(c.date_register)AS regdatum,COUNT(DISTINCT c.id)AS客戶數量FROM客戶c GROUP BY DATE(c.date_register))AS客戶
左聯接
(SELECT DATE(s.added) AS voegdatum,COUNT(DISTINCT s.subscriber_id) AS emailonlies
FROM subscriber s
WHERE s.customer_id=0
GROUP BY DATE(s.added)
) AS subscribers
ON customer.regdatum = subscribers.voegdatum)ORDER BY客戶.regdatum DESC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.