Hello world. 志不强者智不达,言不信者行不果.

SQL 不同条件的GROUP BY语句

在MYSQL的群里有人问这样一个问题:

数据库: 一个 访问表, 有 id --user_id--- visit_page(访问的页面数)
写一个sql, 查询出 访问 1 个页面 2个页面 3 个页面 4 个页面 5个页面 及大于5个页面 的用户数 各是多少?


要求是用一个SQL语句实现,之前都是直接group by  ,没有写过这样的SQL语句,因此尝试写了一下,如下:

select count(*)
from
(
    select visit_page from t where visit_page<5
    union
    select 5 visit_page from t where visit_page>4
)
group by visit_page;

我使用的是嵌套子查询,显然这样是不够优化的啊,要扫描三次数据集才能够得出结果。


接着就有大神回答了,来看下:

select
(
    case when visit_page >5 then 5 else visit_page end
) a,count(1) 
from t 
group by a


这样的话只需要扫描一次数据集就可以了,

哎,需要学习的地方还有很多。



标签: MySQL数据库

作者:yuanmouren1hao 分类:数据库/MySql/Oracle/sqlite 浏览:344 评论:0
留言列表
发表评论
来宾的头像

Top