【发布时间】:2016-02-14 09:41:22
【问题描述】:
我有一个包含列的表格:cid、日期
示例表数据:注意:cid 包含字符串值,例如:'otsytb8o7sbs50w9doghwzvfy0vb8f9h' 许多是重复的。
cid. date
--------------------------------------------------------
1 2015-10-10 04:57:57
2 2015-10-10 05:03:58
3 2015-10-10 05:24:49
4 2015-10-10 05:28:24
5 2015-10-10 05:28:26
6 2015-10-10 05:28:40
7 2015-10-10 05:30:39
8 2015-10-10 05:33:04
9 2015-10-10 05:35:42
9 2015-10-10 05:36:03
我想得到以下内容:
- 作为 uniqVisits 的不同
cid计数 - 退回的
cidHAVING(计数 - 按月分组
我想从 Cookie ID (cid) 获取每月跳出率。
所以我正在寻找:( COUNT of unique Cookie ID's with count of
想要的结果:
uniqVisits | bounced | month
-----------|---------|-------
2345 | 325 | 2015-10
-----------|---------|-------
7345 | 734 | 2015-11
-----------|---------|-------
3982 | 823 | 2015-12
-----------|---------|-------
4291 | 639 | 2016-01
我尝试了很多方法,下面是我能得到的最接近的方法,但它给了我错误:“操作数应包含 1 列”
SELECT count(*) AS bounced,
( SELECT count( DISTINCT(cid) ) AS uniqVisits,
SUBSTR(DATE(date),1,7) AS month
FROM table ) AS uniqVisits
FROM (
SELECT COUNT(cid) AS bounced,
SUBSTR(DATE(date),1,7) AS month
FROM table
GROUP BY cid
HAVING (count <= 1)
) AS x
GROUP BY month
如何编写此查询以在上图所示的“所需结果:”图表/表格中为我提供所需的结果?
顺便说一句:我也尝试了以下查询,但它超时了,然后引发服务器错误:它也没有将第二个查询分组到月份,显然是因为“cid 有计数
SELECT c1.uniqVisits,
c1.month,
c2.bounced
FROM ( SELECT COUNT(DISTINCT t1.cid) AS `uniqVisits`,
SUBSTR(DATE(t1.date),1,7) AS `month`
FROM table t1
GROUP BY month
) c1
JOIN ( SELECT COUNT(*) AS `bounced`,
SUBSTR(DATE(t2.date),1,7) AS `month`
FROM table t2
GROUP BY month, cid HAVING (count <= 1)
) c2
ON c2.month = c1.month
ORDER BY c1.month
【问题讨论】:
-
澄清一下:请添加 exact 输入数据,以生成您正在寻找的 exact 输出数据。例如,无法从该输入中获取 7345。
-
@SamiKuhmonen 这只是一个计数,表中有 100000 个值,您的请求不可行。也有人编辑了我的实际值,但这无关紧要,因为我们只是在计算
cid的数量,其中许多包含重复数据,即相同的cid字符串值 -
@Grant 非常可行。您已经提供了输入。现在提供您想要的输出来自该数据,而不是来自其他一些数据。不需要大量的真实数据行。只是一些输入和相应的输出来显示你想要什么。
-
此请求用于美国验证我们的尝试。如果我们无法验证,我们无法为您提供准确的答案。这就是为什么您需要从 给定示例数据 中提供所需的输出
-
如问题中所述,输出必须等于我的问题中的“期望结果:”表,这就是我想要的输出:uniqVisits = 2345,bounced = 325,month = 2015-10 per row .
标签: mysql