ztyzly00 2018-03-22
单表的查询
此表是用户的搜索记录表
key_word : 用户搜索的关键字
total:搜索出来的条数
user_id : 移动端访问时的微信号
user_ip : 用户的ip地址
session_id : 一次会话的sessionId
create_time : 搜索的时间
stay_time : 页面的停留时间
type : 区分移动端还是PC端
表中的测试数据:
要求:
查询出被搜索词被搜索的次数,有多少用户搜索了这个词,这个词被移动端搜索了多少次,被PC端搜索了多少次,按照这个次被搜索的次数的倒序进行排列
根据user_id和session_id一起判断是否是一个用户
实现的sql:
SELECT
t.key_word keyWord,
count(t.key_word) count1,//关键词被搜索的次数
count(distinct CONCAT(t.user_ip,IFNULL(t.session_id,0))) count2,//判断用户数
count(case t.type when 0 then 0 END) count3,//type为0时有多少条
count(case t.type when 1 then 1 END) count4//type为1时有多少条
FROM
GROUP BY
t.key_word
ORDER BY
t.key_word DESC
关键点:
根据user_ip和session_id判断是否是一个用户时先将这两个的值合到一起,因为数据中有session_id为空的情况,所以用ifnull关键字,如果为null用0进行替换,用concat进行连接,然后去重distinct,最外面用count计数。查看type列为1为0时各有多少条数据,使用case选择,外层依然用count进行计数。