【发布时间】:2019-02-17 21:09:34
【问题描述】:
我有一个 DB 表 students,其中包含每个科目的所有科目最终成绩,这是一个相当大的数字,以及许多其他字段,例如姓名等。
students(表格有100多列,每个单元格可以有一些预设的ID,后来被翻译成等级/一些愚蠢的反黑客技术,几个数字可以代表同一个等级/)
|| name || surname|| section || math1||math 2||math 16|| physics 1||physics 2 ||... ||
|| Jonah || Smith || A4 || 17 || 19 || 0 || 193 || ||
|| John ||Doe || A3 || 0 || 0 || 34 ||12 || 0 || ...||
|| Jane ||Doe || A3 || 0 || 0 || 48 ||12 || 154 || ...||
|| Martin||Doe || A3 || 17 || 34 || 96 ||10 || 225 || ...||
理想的结果
|| avg.grade || name || surname|| section || math1||math 2||math 16|| physics 1||physics 2||... ||
|| 0.92 || John ||Doe || A3 ||0 || 0 ||... ||12 || 0 || ...||
|| 0.81 || Jane ||Doe || A3 ||0 || 0 ||... ||12 || 154 || ...||
除了
之外,实际上没有其他相关的表- 内存表中的辅助,具有等级到 ID 表示
- 科目和学生数据
我想被选中(使用 Laravel 雄辩模型)所有字段和“最终成绩”,所有选中的总和是什么......超过某个阈值。 (下面介绍
SELECT *, a FROM `students` WHERE
`name` LIKE "J%" AND `surname` LIKE "D" AND `section` = 'A3'
enter code here
AND (if(`math16`='12',0.76, 0)
+if(`geometry26`='13',0.76, 0) +if(`physics13`='325',1, 0)
+if(`programming06`='551',1, 0) +if(`biology18`='271',0.916, 0)
+ .... )/18.216 as a > 0.75
'12','13','25','551','271' - 是等级代码。
从技术上讲,我需要让所有学生获得或多或少相同的课程,并且对于给定的起始姓名字母具有一些平均成绩。 (我的意思是,如果我有 John,他参加了特定课程 [数学 16 成绩为 0.76,生物学 18 成绩为 0.91,...] 和 Jane [数学 16 成绩为 0.76,programming06 成绩为 100,...],我想要在没有其他学生的情况下,将他们的记录和他们的成绩总和放在一起。
可能还有其他一些可能性可以将所有具有相同字段的行放在一起,但我不知道该怎么做。 谢谢
【问题讨论】:
-
您能否提供带有记录的
students表/模型的样本,以及您想要的输出如何?目前还不是很清楚。 -
我的意思是用数据样本更新你的问题,你的 sql 语句并没有真正的帮助(imo)。还有您的相关表格(主题,...)
-
@HCK,添加了一些表格
-
@DCR:欢迎对原始发布者如何改进他的问题提出具体建议,但没有帮助的责骂 OP。
-
我认为你应该对你的数据库进行一些不同的建模以解耦你的列。在学生表中有 >100 列它不是很有用,这是因为 - 我假设 - 学生不会同时参加所有这些课程。您可以有一个学生表(包含基本学生信息),然后是一个主题表,其中包含与该课程相关的所有成绩,还可以指定确定应用于该课程的实际成绩的算法......然后是另一个表您将学生与特定学期/课程期间的课程联系起来
标签: php laravel eloquent dynamicquery