Mysql 计数不同的+;通过具有(值)和#x2B对组进行计数;按月分组

Mysql 计数不同的+;通过具有(值)和#x2B对组进行计数;按月分组,mysql,Mysql,我有一个包含以下列的表:cid,date 示例表数据:注意: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

我有一个包含以下列的表:cid,date

示例表数据:注意: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
我想得到以下信息:

  • 独立
    cid
    作为UNIQQ访问的计数

  • 具有的
    cid的计数(计数),因此我已解决此问题:

    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
    

    只是澄清一下:请添加准确的输入数据,以生成您要查找的准确的输出数据。例如,无法从该输入中获取7345。@SamiKuhmonen这只是一个计数,表中有100000个值,您的请求是不可行的。此外,有人编辑了我的实际值,但这与我们的要求无关e仅计算包含重复数据的
    cid
    的数量,即相同的
    cid
    字符串value@Grant这是非常可行的。您已经提供了一个输入。现在从该数据中提供您想要的输出,而不是从其他数据中。不需要成百上千万行的真实数据。只需要一些输入和相应的输出这表明了您的需要。此请求是为了验证我们的尝试。如果我们无法验证,我们无法为您提供准确的答案。这就是为什么您需要提供问题中提到的示例数据的所需输出。输出必须等于“所需结果”:在我的问题表中,这是我想要的输出:uniqVisits=2345,Bounched=325,month=2015-10/行。
    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
    
    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
    
    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