关于mysql数据库中distinct,concat,ifnull的使用讲解

单表的查询

此表是用户的搜索记录表

key_word : 用户搜索的关键字

total:搜索出来的条数

user_id : 移动端访问时的微信号

user_ip : 用户的ip地址

session_id : 一次会话的sessionId

create_time : 搜索的时间

stay_time : 页面的停留时间

type : 区分移动端还是PC端

表中的测试数据:

关于mysql数据库中distinct,concat,ifnull的使用讲解

要求:

查询出被搜索词被搜索的次数,有多少用户搜索了这个词,这个词被移动端搜索了多少次,被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进行计数。

相关推荐