-1

这个查询有什么问题:

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;

有用。

4

1 回答 1

2

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

一些评论可以帮助您顺利上路:

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

  2. 只有当内部查询保证为 student_information 中的每一行生成一条记录时,您的第二条语句才有意义。我有理由确定您尝试做的事情最好使用 JOIN 而不是子查询来完成。

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

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

于 2012-04-09T16:34:20.767 回答