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:无符号整型。