gpt4 book ai didi

Mysql 函数

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:51 25 4
gpt4 key购买 nike

类表

+----+-------+--------------+
| id |teac_id| student_id |
+----+-------+--------------+
| 1 | 1 | 1,2,3,4 |
+----+-------+--------------+

学生成绩

+----+----------+--------+
| id |student_id| marks |
+----+----------+--------+
| 1 | 1 | 12 |
+----+----------+--------+
| 2 | 2 | 80 |
+----+----------+--------+
| 3 | 3 | 20 |
+----+----------+--------+

我有这两个表,我想计算学生的总分,我的sql是:

SELECT SUM(`marks`) 
FROM `student_mark`
WHERE `student_id` IN
(SELECT `student_id` FROM `class_table` WHERE `teac_id` = '1')

但这会返回null,请帮忙!!

DB fiddle

最佳答案

  • 首先,您永远不应在列中存储逗号分隔的数据。你真的应该normalize your data .所以基本上,您可以有一个多对多的表映射 teacher_to_student,它将包含 teac_idstudent_id 列。
  • 在这种特殊情况下,您可以利用 Find_in_set()功能。

从您当前的查询来看,您似乎正在尝试获取一位老师的总分(总结他/她所有学生的分数)。

尝试:

SELECT SUM(sm.`marks`) 
FROM `student_mark` AS sm
JOIN `class_table` AS ct
ON FIND_IN_SET(sm.`student_id`, ct.`student_id`) > 0
WHERE ct.`teac_id` = '1'

如果您想获得每个学生的总分,您需要添加一个Group By。查询看起来像:

SELECT sm.`student_id`, 
SUM(sm.`marks`)
FROM `student_mark` AS sm
JOIN `class_table` AS ct
ON FIND_IN_SET(sm.`student_id`, ct.`student_id`) > 0
WHERE ct.`teac_id` = '1'
GROUP BY sm.`student_id`

关于Mysql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52713371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com