【问题标题】:mysqli every time work only else condition but not if conditionmysqli每次只工作else条件而不是if条件
【发布时间】:2019-04-16 01:47:35
【问题描述】:

这是我的查询

CREATE VIEW marksheet as
SELECT name as name, student_id as student_id, 
roll as roll, class as class,exam_year as exam_year, 
subject_name as subject, exam_type as exam_type,
sum(full_mark) as full_mark, sum(getmark) as getmark,
department as department,
IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa))>=0, 
CAST(IF(subject_type=1,SUM(gpa)-2/count(subject_name),SUM(gpa)/count(subject_name)) 
AS CHAR), 'F') as total_gpa
FROM mark
GROUP by roll, class, exam_type

不工作

IF(subject_type=1,SUM(gpa)-2/count(subject_name),SUM(gpa)/count(subject_name))

每次只工作else condation SUM(gpa)/count(subject_name

不工作subject_type=1,SUM(gpa)-2/count(subject_name)

我的桌子

结果:gpa = 5+8+4+6

         = 23

但是 subject_type = 1 so ,minus -2(不起作用)

         = 21 (Not work)

最终 Gpa = 21/count(subject_name)

【问题讨论】:

  • 你为什么要除以count(subject_name)
  • 总科目like = 7 or 9 ...
  • 所以你要取平均值?
  • 是的,我尝试(total_gpa)/total_subject 如果有任何extra subject 然后minus (-2) 形成总数gpa
  • 那么,如果任何主题有subject_type=1,你是减2还是每一个主题有subject_type=1减2?

标签: php mysql codeigniter mysqli


【解决方案1】:

如果只能有一个额外的科目(即带有subject_type=1 的科目)并且所有其他科目都有subject_type=0,您可以使用MAX(subject_type) 来确定学生是否参加了额外的科目。这个查询应该做你想做的事(注意你还需要() 围绕SUM(gpa)-2):

CREATE VIEW marksheet as
SELECT name as name, student_id as student_id, 
roll as roll, class as class,exam_year as exam_year, 
subject_name as subject, exam_type as exam_type,
sum(full_mark) as full_mark, sum(getmark) as getmark,
department as department,
IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa))>=0, 
CAST(IF(MAX(subject_type)=1,(SUM(gpa)-2)/count(subject_name),SUM(gpa)/count(subject_name)) 
AS CHAR), 'F') as total_gpa
FROM mark
GROUP by roll, class, exam_type

我在SQLFiddle 创建了一个简化的演示。

【讨论】:

  • 别介意我可以得到你的 Facebook 帐户链接。
  • @HasanSheikh 我不在脸书上。 SO 是我的社交网络。
  • 任何通讯链接like skype or others
  • @HasanSheikh 抱歉,这就是我所拥有的一切
  • 那有什么问题?你有请发链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
相关资源
最近更新 更多