我的查询存在以下问题:
我有两张桌子:
由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
;`
答案 0 :(得分:0)
我不完全确定,但我认为在DISTINCT s.subscriber_id AND s.customer_id=0
中,它会在AND
之前运行DISTINCT
,因此DISTINCT
只会看到真假。
你为什么不采取
COUNT(DISTINCT s.subscriber_id) - (COUNT(DISTINCT s.customer_id) - 1)?
(-1是因为DISTINCT s.customer_id
将计为0。)
答案 1 :(得分:0)
知道了,唯一的风险就是如果当天没有客户我没有收到电子邮件,因为左边的加入。但是这个有效:
SELECT customers.regdatum,customers.customersqty,subscribers.emailonlies
FROM( (SELECT DATE(c.date_register)AS regdatum,COUNT(DISTINCT c.id)AS customersqty 来自客户c GROUP BY DATE(c.date_register) )AS客户
LEFT JOIN
(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 customers.regdatum = subscribers.voegdatum ) ORDER BY customers.regdatum DESC ;