首页 > 解决方案 > MYSQL数据库查询-reg

问题描述

select regno, SUM(IF(subjectcode='MA8402',mark,'A'))AS PQT,
SUM(IF(subjectcode='CS8491',mark,'A'))AS CA,
SUM(IF(subjectcode='CS8492',mark,'A'))AS DBMS,
SUM(IF(subjectcode='CS8451',mark,'A'))AS DAA,
SUM(IF(subjectcode='CS8493',mark,'A'))AS OS,
SUM(IF(subjectcode='CS8494',mark,'A'))AS SE FROM testmark where testid=1 
group by regno

很少有学生特别缺席测试我输入的值是'A'但是在显示答案时我得到'A'的行值的查询结果'0',如何打印A而不是'0'

示例根据 testmark 表中的 mysql 值

 Regno  subjectcode  Mark
   101  MA8491        A
   101  CS8491        A
   101  CS8492        A
   101  CS8451        A
   101  CS8493        A
   101  CS8494        A

当应用上面的 sql 查询时,我得到了类似的答案

 Regno  PQT CA  DBMS    OS  DAA SE
   101   0   0   0      0    0   0

预期结果是,

regno PQT CA DBMS DAA OS SE
  101  A   A   A   A   A  A

标签: mysql

解决方案


您可以使用 ifnull 将“A”分配给缺席

select regno, 
MAX(ifnull(IF(subjectcode='MA8402',mark,'A'),'A')) AS PQT,
MAX(ifnull(IF(subjectcode='CS8491',mark,'A'),'A')) AS CA,
MAX(ifnull(IF(subjectcode='CS8492',mark,'A'),'A')) AS DBMS,
MAX(ifnull(IF(subjectcode='CS8451',mark,'A'),'A')) AS DAA,
MAX(ifnull(IF(subjectcode='CS8493',mark,'A'),'A')) AS OS,
MAX(ifnull(IF(subjectcode='CS8494',mark,'A'),'A')) AS SE 
FROM testmark 
where testid=1 
group by regno

(并且您可以使用 MAX 代替 sum .. 字符串的总和不正确)


推荐阅读