数据库面试题1
查询表a的数据,要求如下:
1. 七月份(2017)数据按日期(date)和渠道(channel)汇总点击数(click)的总数;
2. 汇总的点击数总数不大于1000;
3. 查询结果按汇总后的点击数降序排列;
4. 显示前5条;
1 SELECT count(click) AS 'c' 2 FROM a 3 WHERE date LIKE '201707%' #筛选出7月份数据 4 GROUP BY date, channel #按标识字段分组 5 HAVING c <= 1000 #筛选汇总点击数小于1000的分组,having作用是筛选满足条件的分组 6 ORDER BY c DESC #按汇总点击数降序 7 LIMIT 5 #只显示前5条
关于执行顺序:
1. 执行WHERE 对全表数据进行筛选,返回结果集A;
2. 针对结果集A,执行GROUP BY进行分组,返回结果集B;
3. 针对结果集B,执行SELECT进行查询,返回结果集C;
4. 针对结果集C,执行HAVING进行筛选,返回结果集D;
4. 针对结果集D,进行排序和限制查询条数;
5. 对结果集A执行GROUP BY,提前筛选符合条件的数据,可以减少查询次数;
6. 由于HAVING、ORDER BY在SELECT之后执行,因此可以用c来代表count(click),减少重复查询次数;