此查询有什么问题:
SELECT count() as total_students
FROM student_information;
SELECT
(
SELECT student_project_marks
from students_project
WHERE student_project_id=student_information.student_project_id
)
+ student_assignment_marks
+ student_exam_marks AS total_marks
FROM student_information
ORDER BY total_marks DESC;
UPDATE student_information
SET (
SELECT student_grade
FROM student_information
LIMIT 0.1*total_students
ORDER BY total_marks DESC
)="A";
我试图选择0.1*total_students
个学生按其总分数排序并更新他们的成绩....前10%将被授予A.
我收到错误:
syntax error near '('
我有2张桌子: 通过以下查询创建它们:
create table if not exists student_information (
student_name varchar(80),
student_roll_num int primary key,
student_email varchar(64),
student_assignment_marks int(2) check(student_assignment_marks<=30),
student_exam_marks int(2) check(student_exam_marks<=50),
student_project_id varchar(25),
student_grade varchar(2)
)
create table if not exist students_project (
student_project_id varchar(25),
student_project_title varchar(25),
student_project_marks int(2) check(student_project_marks>=0 and student_project_marks<=20)
)
通过student_project
从student_project_id
表格访问项目中的标记。
现在如何根据总分数奖励成绩...... 前10%必须获得A,接下来10%B等等...... 我知道如何计算总分... 我写了这样一个查询:
select student_roll_num,
(SELECT student_project_marks
from students_project
WHERE student_project_id=student_information.student_project_id )+
student_assignment_marks+student_exam_marks as total_marks from student_information;
有效。
答案 0 :(得分:2)
这甚至不是大致正确的SQL。此外,还不清楚如何您正在执行这些语句(来自控制台,程序等)。
一些评论可以帮助您顺路前进:
SQL不会“记住”从一个语句到下一个语句的先前语句的结果。因此,在第一个SQL语句中计算total_students
与尝试在第三个语句中实际使用该值无关。同样,您在第三个查询中无法在第二个查询中导出total_marks
。
如果内部查询保证只为student_information中的每一行生成一条记录,那么您的第二条语句才有意义。我有理由相信,使用JOIN而不是子查询可以更好地完成您尝试做的事情。
第三个查询(UPDATE)是距离SQL最远的查询。 UPDATE在表中的一列或多列上运行。每列都分配了一个新值。它操作的列必须用正确的标识符命名。您可以在等号的右侧侧使用子查询,但不能在左侧使用子查询(尽管您没有任何理由在此处使用)。要操作的行集的条件属于UPDATE语句末尾的WHERE子句,而不属于任何类型的子查询。
猜测你的意图,我认为你可能需要SUM或AVG来自student_projects的成绩(假设每个学生有几个项目要考虑),并且你的任何查询都没有聚合。
< / LI> 醇>