【问题标题】:Select with conditional statement用条件语句选择
【发布时间】:2014-11-20 19:54:53
【问题描述】:
-------------------------------
StudentID| SubCode  | Marks   | 
-------------------------------
B016124  |   112    |     89  |    
B016124  |   114    |     91  |     
B016124  |   116    |     99  |       
-------------------------------
B016129  |   112    |     78  |    
B016129  |   114    |     88  |     
B016129  |   116    |      0  |    

输出:

            SubCode=112   SubCode=114  SubCode=116  tot of 112+114 |Tot 112+114+116
-----------------------------------------------------------------------------------
StudentID  | PractEx112  | PractEx114| TotalPract    |ExamMrks116  | TotalMarks   |
-----------------------------------------------------------------------------------
B016124    |       89    |     91    |      180      |    90       |      270     |
-----------------------------------------------------------------------------------
B016129    |       78    |     88    |      166      |     0       |        0     |
-----------------------------------------------------------------------------------


Select StudentID,
        , sum(CASE WHEN SubCode = 112 THEN Marks END) AS PractEx112
        , sum(CASE WHEN SubCode = 114 THEN Marks END) AS PractEx114
        , sum(CASE WHEN SubCode IN(112,114) THEN Marks END) AS TotalPract
        , sum(CASE WHEN SubCode = 116 THEN Marks END) AS ExamMrks116

FROM STUDENTS
GROUP BY StudentID

如何计算上述 select 语句中的 TotalMarks,其中 如果学生没有参加 ExamMrks116(SubCode=116),则 TotalMarks = 0。

否则使用 PractEx112(SubCode=112)、PractEx114(SubCode=114) 和 ExamMrks116(SubCode=116) 的总和

【问题讨论】:

  • 请格式化您的问题。我了解您的输入和预期输出,但我无法理解您对所需逻辑的陈述。
  • 我如何设置问题的格式 我有整个问题的图像或文本格式
  • 我需要计算 TotalMarks,即 PractEx112+PractEx114 +ExamMrks116。如果学生没有参加 ExamMrks116,则他们的粒子不会添加到 TotalMarks 中,并且 TotalMarks = 0 只有在 ExamMarks116 列中输入了分数时才会添加。

标签: mysql sql select case


【解决方案1】:

一种选择是将这些结果放在子查询中,然后使用case

select StudentID, PractEx112, PractEx114, PractEx116, 
    case when PractEx116 = 0 then 0 else TotalOverall end total
from (
    select StudentID, 
        sum(case when SubCode = 112 then Marks end) AS PractEx112 , 
        sum(case when SubCode = 114 then Marks end) AS PractEx114 , 
        sum(case when SubCode in (112,114) then Marks end) AS TotalPract , 
        sum(case when SubCode = 116 then Marks end) AS ExamMrks116
        sum(case when SubCode in (112,114,116) then Marks end) AS TotalOverall
    from students 
    group by StudentID
) t

【讨论】:

  • 这不起作用,因为 PractEx112、PractEx114、PractEx116 和 TotalOverall 不是学生表中使用的变量
猜你喜欢
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多