前言:
在自己开发网站或某运营项目需要统计网站不同维度的数据时,需要去查询sql数据库,通常查询维护比较固定(遍历所有维度就固定啦),需要统计的数据如:网站历史访问总人数,网站历史用户行为总数据,网站历史用户行为最喜欢点击的模块,最近一周即7日网站用户,每日访问数量,某时间段用户访问的总数等以上所有数据区分是否为独立用户?还是非独立用户,暂时有以下场景
查询的统计维度的需求依次如下:
总览
# 总 独立ip总人数,ip去重
# 总 热词搜索前20条 log_name
# 总 用户行为排序 log_content
# 总 按天筛选每天ip总数,ip未去重
单次数据
# 单 查询某时间独立用户访问用户ip总人数,ip已去重
# 单 查询某时间热词搜索前20条 log_name
# 单 查询某时间用户行为排序log_content次数
# 单 查询用户某时间段每天访问ip总数,ip未去重
# 单 查询用户某时间断每天独立访问ip总数
# 单 查询最近7天的每天独立访问ip总数
Mysql 数据格式和内容示例
# 总 独立ip总人数,ip去重
SQL语句
SELECT
COUNT(*) AS all_count_ip
FROM
( SELECT log_ip FROM web_log GROUP BY log_ip ) AS count_ip;
查询结果
# 总 热词搜索前20条 log_name
SQL语句
SELECT
log_name,
COUNT(*)
FROM
web_log
GROUP BY
log_name
ORDER BY
COUNT(*) DESC
LIMIT 0,
20;
查询结果
# 总 用户行为排序 log_content
SQL语句
SELECT
log_content,
COUNT(*)
FROM
web_log
GROUP BY
log_content
ORDER BY
COUNT(*) DESC
LIMIT 0,
11;
查询结果
# 总 按天筛选每天ip总数,ip未去重
SQL语句
SELECT
date_format( log_time, '%Y-%m-%d' ) dat,
count(*) ip
FROM
web_log
GROUP BY
date_format( log_time, '%Y-%m-%d' );
查询结果
# 单 查询某时间独立用户访问用户ip总人数,ip已去重
SQL语句
SELECT
COUNT(*)
FROM
( SELECT log_ip FROM web_log WHERE log_time > "2021-8-12" AND log_time < "2021-08-13" GROUP BY log_ip ) AS count_ip;
查询结果
# 单 查询某时间热词搜索前20条 log_name
SQL语句
SELECT
log_name,
COUNT(*)
FROM
web_log
WHERE
log_time > "2021-8-12"
AND log_time < "2021-08-13"
GROUP BY
log_name
ORDER BY
COUNT(*) DESC
LIMIT 0,
20;
查询结果
# 单 查询某时间用户行为排序log_content次数
SQL语句
SELECT
log_content,
COUNT(*)
FROM
web_log
WHERE
log_time > "2021-8-12"
AND log_time < "2021-08-13"
GROUP BY
log_content
ORDER BY
COUNT(*) DESC
LIMIT 0,
11;
查询结果
# 单 查询用户某时间段每天访问ip总数,ip未去重
SQL语句
SELECT
date_format( log_time, '%Y-%m-%d' ) dat,
count(*) ip
FROM
web_log
WHERE
log_time > "2021-08-11"
AND log_time < "2021-08-13"
GROUP BY
date_format( log_time, '%Y-%m-%d' );
查询结果
# 单 查询用户某时间断每天独立访问ip总数
SQL语句
SELECT
result.dat,
count( result.num ) AS num
FROM
(
SELECT
date_format( log_time, '%Y-%m-%d' ) dat,
count( log_ip ) num
FROM
web_log
WHERE
log_time > "2021-08-5"
AND log_time < "2021-08-12"
GROUP BY
date_format( log_time, '%Y-%m-%d' ),
log_ip
) AS result
GROUP BY
result.dat
查询结果
# 单 查询最近7天的每天独立访问ip总数
SQL语句
SELECT
a.time date,
count( DISTINCT log_ip ) countip
FROM
(
SELECT
id,
DATE_FORMAT( log_time, '%Y-%m-%d' ) 'time',
log_name,
log_ip,
log_content,
user_agent,
submit_name,
is_delete
FROM
web_log
WHERE
(
DATE_SUB( CURDATE(), INTERVAL 7 DAY ) <= date( log_time ))
AND is_delete = 1
) a
GROUP BY
a.time;
查询结果