题解 | #统计复旦用户8月练题情况#

统计复旦用户8月练题情况

https://www.nowcoder.com/practice/53235096538a456b9220fce120c062b3

select
    a.device_id,
    university, //需改进
    count(question_id) question_cnt,
    sum(if(result = 'right', 1, 0)) right_question_cnt
from
    user_profile a
    left join question_practice_detail b
    on a.device_id = b.device_id
    and month (date) = 8
where
    university = '复旦大学'
group by
    a.device_id;

在MySQL8.0+版本中,默认情况下,select语句中的列必须出现在group by子句中或被包含在聚合函数中,否则会导致查询报错, 这是为了确保查询结果的确定性和一致性.

上述查询university列并未出现在group by子句中,根据SQL标准,这种查询是无效的,除非university在每个device_id下都有相同的值.若university和device_id字段是1:1或1:n关系,则这条查询可能能正确返回结果,但这仅是因为数据的特性,而不是查询语法的正确性.

改进(确保university在每个device_id下是一致的):

  1. university选项改成:'复旦大学' university 或: MAX(university) university
  2. 结尾改成:group by a.device_id, a.university
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务