-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 ステートメントでの の計算は、3 番目のステートメントでその値を実際に使用しようとする試みとは関係ありません。同様にtotal_marks、2 番目のクエリで派生しようとしても、3 番目のクエリでは利用できません。

  2. 2 番目のステートメントは、内部クエリが Student_information の各行に対して 1 つのレコードのみを生成することが保証されている場合にのみ意味があります。あなたがやろうとしていることは、サブクエリではなく JOIN を使用したほうがよいと確信しています。

  3. 3 番目のクエリ (UPDATE) は、SQL から最も離れたクエリです。UPDATE は、テーブル内の 1 つまたは複数の列に対して動作します。各列には新しい値が割り当てられます。操作対象の列には、正しい識別子を使用して文字どおりの名前を付ける必要があります。等号の右側ではサブクエリを使用できますが、左側では使用できません (ただし、ここで使用する理由はありません)。操作対象の行セットの条件は、UPDATE ステートメントの最後の WHERE 句に属し、どのような種類のサブクエリにも属しません。

  4. あなたの意図を推測すると、student_projects からの成績を SUM または AVG する必要があると思います (各学生に考慮すべきプロジェクトがいくつかあると仮定します)。どのクエリにも集計はありません。

于 2012-04-09T16:34:20.767 に答える