欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-12 20:17:46
单表的查询 此表是用户的搜索记录表 key_word : 用户搜索的关键字 total:搜索出来的条数 user_id : 移动端访问时的微信号 user_ip : 用户...

单表的查询

此表是用户的搜索记录表

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进行计数。