关于mysql的distinct,concat,ifnull的使用

单表的查询 

此表是用户的搜索记录表

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值