SQL 不同条件的GROUP BY语句

嗯,这里是简介,主题配置内可以修改,如留空则不显示

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


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

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



发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Hello world. 豫ICP备16008819号-1.

Power by Z-BlogPHP  Theme by wzdaxue