You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求符合要求的SQL查询语句:统计用户已审批未删除服务日志总时长

正确SQL查询语句实现

表结构

users 
    id bigint
    first_name varchar(255)
    last_name varchar(255)
    email varchar(255) 

service_events
    id bigint
    name varchar(255)

service_logs
    id bigint
    approved tinyint
    user_id bigint(fk:users)
    service_event_id bigint(fk:service_events)
    deleted_at datetime(nullable)

service_log_days
    id bigint
    service_log_id bigint(fk:service_logs)
    total_hours double

注:修正了原表结构中sevice_log_id的拼写错误,应为service_log_id以匹配外键关联

需求

返回包含用户信息及已审批、未删除服务日志总时长的表:

  • 需返回所有用户记录,无论是否有符合条件的服务日志
  • 无符合条件日志的用户,时长值为0
  • 每位用户仅对应一行记录

示例输出

first_name  last_name   email           total_hours
Student     One         one@email.com   0
Student     Two         two@email.com   135

正确查询语句

SELECT 
    u.first_name,
    u.last_name,
    u.email,
    COALESCE(SUM(sld.total_hours), 0) AS total_hours
FROM users u
LEFT JOIN service_logs sl 
    ON u.id = sl.user_id 
    AND sl.approved = 1 
    AND sl.deleted_at IS NULL
LEFT JOIN service_log_days sld 
    ON sl.id = sld.service_log_id
GROUP BY u.id, u.first_name, u.last_name, u.email;

语句说明

  1. 用LEFT JOIN关联users与service_logs,确保所有用户都被保留,同时在关联条件中直接过滤出**已审批(approved=1)、未删除(deleted_at IS NULL)**的日志
  2. 再通过LEFT JOIN关联service_log_days,获取对应时长记录
  3. 用SUM(sld.total_hours)计算总时长,配合COALESCE将无符合条件日志时的NULL值转为0
  4. 通过GROUP BY按用户唯一标识及信息字段分组,保证每位用户仅返回一行记录

内容的提问来源于stack exchange,提问作者user3229397

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:09:24