MySQL多个查询到单个查询

时间:2011-06-05 12:36:25

标签: mysql

我有一个类似于以下行的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应该用日期替换,这只是一个例子)

任何建议都会受到欢迎。

感谢。

1 个答案:

答案 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