[英]Get count on two different date columns and group by date
我有包含两个DATE列的表。 TS_customer和TS_verified
我正在寻找一种获取结果的方法,其中在第一列中有一些日期,有人创建用户(TS_customer)或有人通过验证(TS_verified)。
在第二列中,我希望count(TS_customer)按第一列分组。 我希望第三列按第一列进行计数(TS_verified)。
可能是在注册日期验证了0位客户,在另一种情况下,在某人获得验证的日期验证了0位客户。
我想这应该很容易,但是我现在已经花了很多时间了。 非常感谢您的帮助。 我需要在excel中使用它,因此我基本上希望有多少客户注册,有多少人一天可以通过验证,而不必麻烦进行两个选择并手动组合它们。
编辑:链接到SQLfiddle http://sqlfiddle.com/#!2/b14fc/1/0
谢谢
首先,我们需要天数清单。
看起来像这样http://sqlfiddle.com/#!2/b14fc/14/0 :
SELECT DISTINCT days
FROM (
SELECT DISTINCT DATE(TS_customer) days
FROM customer
UNION
SELECT DISTINCT DATE(TS_verified) days
FROM customer
) AS alldays
WHERE days IS NOT NULL
ORDER BY days
接下来,我们需要按天汇总客户数量。 这很简单http://sqlfiddle.com/#!2/b14fc/16/0 :
SELECT DATE(TS_customer) days, COUNT(TS_customer)
FROM customer
GROUP BY days
每天进行验证摘要也很容易。
接下来,我们需要将这三个子查询连接到http://sqlfiddle.com/#!2/b14fc/29/0 。
SELECT alldays.days, custcount, verifycount
FROM (
SELECT DISTINCT DATE(TS_customer) days
FROM customer
UNION
SELECT DISTINCT DATE(TS_verified) days
FROM customer
) AS alldays
LEFT JOIN (
SELECT DATE(TS_customer) days, COUNT(TS_customer) custcount
FROM customer
GROUP BY days
) AS cust ON alldays.days = cust.days
LEFT JOIN (
SELECT DATE(TS_verified) days, COUNT(TS_verified) verifycount
FROM customer
GROUP BY days
) AS verif ON alldays.days = verif.days
WHERE alldays.days IS NOT NULL
ORDER BY alldays.days
最后,如果您希望在没有任何客户和/或验证的情况下显示0
而不是(null)
,请将SELECT行更改为此http://sqlfiddle.com/#!2/b14fc/30/0 。
SELECT alldays.days,
IFNULL(custcount,0) AS custcount,
IFNULL(verifycount,0) AS verifycount
看看情况如何? 我们会逐步建立您的结果集。
我对为什么创建一个无法在TS_Customer上保存null
值的小提琴感到困惑,然后提到该字段可以保存null
值。
话虽如此,我已经修改了解决方案以使用null
值,但仍然非常有效和简单:
SELECT days, sum(custCount) custCount, sum(verifCount) verifCount FROM (
SELECT DATE(TS_customer) days, count(*) custCount, 0 verifCount
FROM customer
WHERE TS_customer IS NOT NULL
GROUP BY days
UNION ALL
SELECT DATE(TS_verified) days, 0, count(*)
FROM customer
WHERE TS_verified IS NOT NULL
GROUP BY days
) s
GROUP BY days
我也创建了一个包含一些空值的不同小提琴这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.