我有一个类似于以下行的mysql表:
id | event_type | occurance_date | ipaddress
我希望获得日期,独特访问次数和每日总访问次数。这对于2个查询非常容易,但我只想制作一个。
所以我想 为了得到我可以的日子
SELECT DISTINCT(occurance_date) as day FROM statistics WHERE event_type = 'visit'
ORDER BY id DESC LIMIT 14;
获得每日独特访问次数
SELECT COUNT(DISTINCT(ipaddress)) as unique_visits FROM statistics WHERE occurance_date = '2011-05-11';
获取所有访问次数
SELECT COUNT(id) as total_visits FROM statistics WHERE occurance_date = '2011-05-11';
问题是我如何使用unique_visits和total_visits让所有日子都返回一个查询。
(2011-05-11应该用日期替换,这只是一个例子)
任何建议都会受到欢迎。
感谢。
答案 0 :(得分:3)
select count(*) as total_visits, count(distinct(s1.ipaddress)) as unique_visits
FROM statistics s1
WHERE event_type = 'visit'
GROUP BY occurrence
ORDER BY unique_visits;
带注释的版本:
首先我们进行SELECT计数(所有行)
select count(*) as total_visits,
加上不同的ipaddresses的数量
count(distinct(s1.ipaddress)) as unique_visits
从统计数据来看,我添加了一个别名,但这只是出于习惯。这不是必需的。
FROM statistics s1
请记住,您只想要有event_type'访问'的行
你也有一些信息需要,但是你不想过滤掉那些,你只是想把它们看作结果中的单独项目。
因此,我们唯一的过滤器是event_type
。
WHERE event_type = 'visit'
我们按结果日期对结果进行分组,如果您将此行留下,则只能看到一行。把它放回来看看差异。
GROUP BY occurrence
我们按访问次数排序结果,但我不想重写count(distinct(s1.ipaddress))
所以我写了别名unique_visits
;这是允许的(甚至在order by
子句中鼓励。)
ORDER BY unique_visits;
<强>链接:强>
分组,从不介意这个神话部分,只是阅读分组如何工作的描述:
http://dev.mysql.com/tech-resources/articles/debunking-group-by-myths.html
数:http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html