【问题标题】:COUNT DISTINCT + COUNT GROUP BY HAVING (value) + GROUP BY monthsCOUNT DISTINCT + COUNT GROUP BY HAVING(值)+ GROUP BY 月
【发布时间】: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

我想得到以下内容:

  1. 作为 uniqVisits 的不同 cid 计数
  2. 退回的cid HAVING(计数
  3. 按月分组

我想从 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


【解决方案1】:

所以我已经解决了这个问题:

SELECT uniqVisitors, COUNT(*) AS bounced, T1.month
FROM (
    SELECT cid,
    SUBSTR(DATE(date),1,7) AS month
    FROM table
    GROUP BY cid
    HAVING COUNT(*) <= 1
) T1
LEFT JOIN
( SELECT count( DISTINCT(cid) ) AS uniqVisitors,
    SUBSTR(DATE(date),1,7) AS month
    FROM table
    GROUP By month ) T2
ON T1.month = T2.month
GROUP BY month

给我:

uniqVisitors | bounced | month  
---------------------------------
7237    6822    2015-10
12597   12136   2015-11
12980   12573   2015-12
12091   11695   2016-01
5396    5134    2016-02

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2014-11-07
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多