SQL Query给出错误

时间:2012-04-09 15:51:53

标签: sql sqlite

此查询有什么问题:

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_projectstudent_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;

有效。

1 个答案:

答案 0 :(得分:2)

这甚至不是大致正确的SQL。此外,还不清楚如何您正在执行这些语句(来自控制台,程序等)。

一些评论可以帮助您顺路前进:

  1. SQL不会“记住”从一个语句到下一个语句的先前语句的结果。因此,在第一个SQL语句中计算total_students与尝试在第三个语句中实际使用该值无关。同样,您在第三个查询中无法在第二个查询中导出total_marks

  2. 如果内部查询保证只为student_information中的每一行生成一条记录,那么您的第二条语句才有意义。我有理由相信,使用JOIN而不是子查询可以更好地完成您尝试做的事情。

  3. 第三个查询(UPDATE)是距离SQL最远的查询。 UPDATE在表中的一列或多列上运行。每列都分配了一个新值。它操作的列必须用正确的标识符命名。您可以在等号的右侧侧使用子查询,但不能在左侧使用子查询(尽管您没有任何理由在此处使用)。要操作的行集的条件属于UPDATE语句末尾的WHERE子句,而不属于任何类型的子查询。

  4. 猜测你的意图,我认为你可能需要SUM或AVG来自student_projects的成绩(假设每个学生有几个项目要考虑),并且你的任何查询都没有聚合。

    < / LI>