Mysql 计数不同的+;通过具有(值)和#x2B对组进行计数;按月分组
我有一个包含以下列的表:cid,date 示例表数据:注意:cid包含字符串值,例如:“otsytb8o7sbs50w9doghwzvfy0vb8f9h”许多值是重复的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
--------------------------------------------------------
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