题解 | #统计复旦用户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
全部评论

相关推荐

11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务