簡體   English   中英

錯誤使用內部聯接功能/組功能?

[英]Wrong use of inner join function / group function?

我的查詢存在以下問題:

我有兩個表:

  1. 顧客
  2. 訂戶

由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.

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