2

次のテーブルレイアウトがあります

表 a

Teacher Students
Mohan pankaj
Mohan sudeepa
Mohan sujitra
Mohan Sumit

表b(1学期の点数)

Pankaj Maths 50
Pankaj English 40
Pankaj Physics 60
Sudeepa Chemisty 40
Sujitra Physic 10
Sujitra English 40
Sujitra Hindi 70

表 c (2 学期の点数)

Pankaj Chemistry 50
Pankaj English 40
Pankaj Physics 60
Sudeepa Science 40
Sujitra Physic 10
Sujitra Maths 40
Sujitra Hindi 70

次のように出力したい:-

hindi 140.00
maths 40.00
physics 10.00
science 40.00
chemistry 40.00
english 40.00
physics 10.00

クエリを書きました

select subject,sum(marks) from sample.b where
student in ( select student from sample.a where teacher='mohan')
group by subject

union all
select subject,sum(marks) from sample.c
where student in ( select student from sample.test where teacher='mohan')
group by subject

私は次のように結果を得ています

hindi 70.00
maths 40.00
physics 10.00
science 40.00
chemistry 40.00
english 40.00
hindi 70.00
physics 10.00

*問題* Same subjects marks are not adding up ..

4

2 に答える 2

0

これにより、成績を別々の列に分離することで、求めていたものが得られるはずです。

Select subject, sum(s1mark) sem1tot, sum(s2mark) sem2tot
From ( select subject, mark as s1mark, 0 as s2mark
         From b join a  on a.student=b.student and a.teacher='Mohan'
       UNION
       select subject, 0 as s1mark, mark as s2mark
         From b join a  on a.student=b.student and a.teacher='Mohan'
     )
group by subject
order by subject
于 2013-06-29T01:58:21.930 に答える
0

更新クエリは次のようになります

SELECT s.subject, s1.marks sem1_marks, s2.marks sem2_marks
FROM
(
  SELECT b.subject 
    FROM b JOIN a 
      ON b.student = a.students
   WHERE a.teacher = 'Mohan'
   UNION 
  SELECT c.subject 
    FROM c JOIN a 
      ON c.student = a.students
   WHERE a.teacher = 'Mohan'
) s 
LEFT JOIN
(
  SELECT b.subject, SUM(b.marks) marks
    FROM b JOIN a 
      ON b.student = a.students
   WHERE a.teacher = 'Mohan'
   GROUP BY b.subject
) s1 ON s.subject = s1.subject 
LEFT JOIN
(
  SELECT c.subject, SUM(c.marks) marks
    FROM c JOIN a 
      ON c.student = a.students
   WHERE a.teacher = 'Mohan'
   GROUP BY c.subject
) s2 ON s.subject = s2.subject

出力:

| | 件名 | SEM1_MARKS | SEM2_MARKS |
------------------------------------------------------
| | 化学 | 40 | 50 |
| | 英語 | 80 | 40 |
| | ヒンディー語 | 70 | 70 |
| | 数学 | 数学 50 | 40 |
| | 物理学 | 70 | 70 |
| | 科学 | (ヌル) | 40 |

これがSQLFiddle のデモです (これも SQL Server ですが、DB2 で動作するはずです)。

元の質問に対する元の回答:最初に内部選択で 2 つのデータセット (集計されているかどうかに関係なく) が必要UNION ALLであり、次に集計SUM()を適用GROUP BYして外部選択に適用します。

SELECT subject, SUM(marks) marks
FROM
(
  SELECT student, subject, marks 
    FROM b JOIN a 
      ON b.student = a.students
   WHERE a.teacher = 'Mohan'
   UNION ALL
  SELECT student, subject, marks 
    FROM c JOIN a 
      ON c.student = a.students
   WHERE a.teacher = 'Mohan'
) q
 GROUP BY subject

出力:

| | 件名 | マーク |
----------------------
| | 化学 | 90 |
| | 英語 | 120 |
| | ヒンディー語 | 140 |
| | 数学 | 数学 90 |
| | 物理学 | 140 |
| | 科学 | 40 |

これがSQLFiddleデモ (SQL Server) です。しかし、DB2 でも同じように機能するはずです。

于 2013-06-28T06:20:00.113 に答える