小明负责支付订单的日志分析工作,公司有表order_log; order_log表代表玩家创建订单的客户端日志(order_id订单号,uid用户id,日志采集时间logtime,客户端记录时间time,product_id商品id,支付方式pay_method)

user_info表代表玩家用户信息(order_id订单号,uid用户id,channel为用户注册的渠道)

【问题】 现需要针对用户过滤统计出未下单的注册渠道最多的渠道,如果相同则以渠道名顺序排列;即user_info表中未在order_log中下单的用户channel信息统计 【知识点】 聚合函数,条件判断,连接,聚合统计 【示例结果】 返回列 channel | cnt

【示例解析】 user_info中未在order_log下单的用户为user_0002、user_0003,douyin渠道排序在pdd前面,最后返回douyin | 1 注:不需要注意返回数据为空
DROP TABLE IF EXISTS `order_log`;
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE IF NOT EXISTS `order_log`(
order_id varchar(255) NOT NULL,
uid varchar(32) DEFAULT NULL,
logtime varchar(32) DEFAULT NULL,
time varchar(32) DEFAULT NULL,
product_id varchar(32) DEFAULT NULL,
pay_method varchar(32) DEFAULT NULL,
UNIQUE uni_trace(order_id)
);
INSERT IGNORE `order_log` VALUES (
'aaa1','user_0001','2021-01-01 11:00:00','2021-01-01 10:00:00','p599',''),
('aaa2','user_0001','2021-01-01 12:00:00','2021-01-01 10:00:00','p599',''),
('aaa3','user_0001','2021-01-01 13:00:00','2021-01-01 10:00:00','p599',''),
('bbbb','user_0006','2022-01-01 09:59:58','2021-01-01 09:59:58','p599',''),
('cccc','user_0006','2022-01-01 09:59:58','2021-01-01 09:59:58','p599',''),
('dddd','user_0006','2022-01-02 09:59:58','2021-01-02 09:59:58','p599','');
CREATE TABLE IF NOT EXISTS `user_info`(
uid varchar(32) DEFAULT NULL,
channel varchar(32) DEFAULT NULL
);
INSERT IGNORE `user_info` VALUES (
'user_0001','wx'),
('user_0002','pdd'),
('user_0003','douyin'),
('user_0006','du');douyin|1
考点:SQL 查询
限制 1 秒 / 256MB | SQL 题
本题是 SQL 题:给出建表语句与目标结果,要求写出查询语句。
建议步骤
GROUP BY 聚合,过滤分组结果用 HAVING。ROW_NUMBER()、RANK()、SUM() OVER)。易错点:排序方向写反;GROUP BY 后选了非分组字段;没做 ROUND 保留小数;空值参与聚合。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年秋招-京东-技术通用岗位-第三批笔试。