2016-09-23 11 views
0

私はこのテーブルStudentを持っている:Sum関数

  1. ID(int型、主キーのID)
  2. 名(VARCHAR(20))
  3. スコア(int型)
  4. RecordDate(DateTime)

この表の列に加えて、生徒のNameに応じて 'スコア'列の '合計'を表す余分な列を追加しました。

私はこれを試してみましたが、それは

select S.Id,S.Name ,S.Score ,S.RecordDate, (select Sum(Score) from Student where Name= S.Name) as All_Student_Score 
from Student S; 

どのように私はこのクエリを変更することができますか?動作しませんでしたか

+0

いけないデータベース – Mihai

+1

をミックスあなたはこれを探していますSQL Serverやmysql、あるいはその両方で? –

+0

@ KannanKandasamyともに –

答えて

1
You can use a `JOIN`: 

    SELECT S.*, 
      T.All_Student_Score 
    FROM Student S 
    INNER JOIN (SELECT Name, SUM(Score) All_Student_Score 
       FROM Student) T 
     ON S.Name = T.Name; 
1

あなたは、以下のソリューションがあなたの条件のために働くこの

select Id,Name ,Score ,RecordDate, sum(score) over(partition by name) as All_Student_Score from Student S 
+0

これはmysqlでは機能しません – Lamak

+0

彼はそれをSQLサーバとしても言いました.. –

+0

あなたは正しいですが、それに気づいていませんでした。しかし、あなたのクエリはまだ間違っています – Lamak

1

のように試すことができます。

select Id, 
     Name, 
     Score, 
     RecordDate, 
     sum(score) over(partition by name) as All_Student_Score 
    from Student; 
1

誰もあなたは自分のサブクエリでは、あなたのテーブルエイリアスあなたは次の操作を行うことができます場合は、独自のソリューションが動作する必要があることをあなたは認められなかったので:

select 
    S.Id,S.Name 
    ,S.Score 
    ,S.RecordDate 
    ,(select Sum(Score) from Student s2 where s2.Name= S.Name) as All_Student_Score 
from 
    Student S;