题解 | #所有用户对高难度题目的刷题数#

所有用户对高难度题目的刷题数

https://www.nowcoder.com/practice/e8b66c069376405bb7524b217c890b23

select  a.device_id,convert(SUM(CASE WHEN c.difficult_level = 'hard' THEN 1 ELSE 0 END),signed) AS question_cnt
FROM user_profile a
LEFT JOIN question_practice_detail b ON a.device_id = b.device_id
LEFT JOIN question_detail c ON b.question_id = c.question_id
GROUP BY a.device_id
ORDER BY convert(SUM(CASE WHEN c.difficult_level = 'hard' THEN 1 ELSE 0 END),signed) ;

1. 多表连接,写多个join on语句。但要分清是left还是right。本题是针对所有device_id进行计算,所以要保证device_id是最全的。

2. 在select语句中运用if判断后再求和。where条件筛选不可以用,因为是针对所有用户选择difficult_level = 'hard', 不是只选择difficult_level = 'hard'的用户。

3. 本题难点,强制转换函数cast()或者convert()。

语法: 

cast(value as type)

convert(value, type)

type类型选择: 

binary:二进制类型;char:字符类型;date:日期类型;time:时间类型;datetime:日期时间类型;decimal:浮点型;signed:整型;unsigned:无符号整型。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务