最近帮一个朋友写一个打分系统,就是他手下有一批讲师,讲师讲完课后,学员要对讲师打分,对10个问题打1-5分。然后后台统计所有讲师的总得分,总平均分,今日得分,今日平均分情况,并排名。
本着一条SQL语句解决的办法,我们可以写出下面的SQL语句
我们先看打分记录表,目前我们设计得很简单,10个问题,对应10个字段(因为对方需求很简单,且不常变,如果经常变,建议弄一个关联表)
我们可以对上面的需求进行分解
1、统计所有讲师的总分
2、统计所有讲师的平均分
3、统计今天的数据
只需要 WHERE 后面加以下条件即可
4、如果为 NULL 就设置为 0 可以用
5、查询所有的讲师,然后左连接添加今日所有讲师得分
最后完整的
统计所有讲师的总得分,总平均分,今日得分,今日平均分情况,并排名
结果如下
本着一条SQL语句解决的办法,我们可以写出下面的SQL语句
我们先看打分记录表,目前我们设计得很简单,10个问题,对应10个字段(因为对方需求很简单,且不常变,如果经常变,建议弄一个关联表)
我们可以对上面的需求进行分解
1、统计所有讲师的总分
- SELECT
- teacher_id,
- sum( q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 ) AS total
- FROM
- sens_record
- GROUP BY
- teacher_id
2、统计所有讲师的平均分
- SELECT
- teacher_id,
- sum( q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 ) / count( * ) AS avg
- FROM
- sens_record
- GROUP BY
- teacher_id
3、统计今天的数据
只需要 WHERE 后面加以下条件即可
- to_days( create_time ) = to_days( now( ) )
4、如果为 NULL 就设置为 0 可以用
- IFNULL( 字段, 0 )
5、查询所有的讲师,然后左连接添加今日所有讲师得分
- SELECT
- t.id,
- t.NAME,
- IFNULL( today.total, 0 ) AS todayTotal
- FROM
- sens_teacher t
- LEFT JOIN (
- SELECT
- teacher_id,
- sum( q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 ) AS total
- FROM
- sens_record
- WHERE
- to_days( create_time ) = to_days( now( ) )
- GROUP BY
- teacher_id
- ) AS today
- ON t.id = today.teacher_id
最后完整的
统计所有讲师的总得分,总平均分,今日得分,今日平均分情况,并排名
- SELECT
- t.id,
- t.NAME,
- IFNULL( total.total, 0 ) AS total,
- IFNULL( ROUND(total.avg), 0 ) AS avg,
- IFNULL( today.total, 0 ) AS todayTotal,
- IFNULL( ROUND(today.avg), 0 ) AS todayAvg
- FROM
- sens_teacher t
- -- 获得所有的总分和平均分
- LEFT JOIN (
- SELECT
- teacher_id,
- sum( q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 ) AS total,
- sum( q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 ) / count( * ) AS avg
- FROM
- sens_record
- GROUP BY
- teacher_id
- ) AS total ON t.id = total.teacher_id
- -- 获得今天的总分和平均分
- LEFT JOIN (
- SELECT
- teacher_id,
- sum( q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 ) AS total,
- sum( q1 + q2 + q3 + q4 + q5 + q6 + q7 + q8 + q9 + q10 ) / count( * ) AS avg
- FROM
- sens_record
- WHERE
- to_days( create_time ) = to_days( now( ) )
- GROUP BY
- teacher_id
- ) AS today ON t.id = today.teacher_id
- WHERE t.type = 1
- ORDER BY total DESC
结果如下
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏