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