放置所有成绩的学生1

时间:2017-09-12 00:37:02

标签: mysql

我有一个表subject,其中包含subject codeuser_idgrade列。我还有一张学生桌。

学生表:

| user_id | name |
+---------+------+
| 17000   | elle |

主题表:

| subjcode | user_id | grade |
+----------+---------+-------+
| os1      | 17000   | 90    |
| micro    | 17000   | 90    |

什么是正确的查询,以便输出看起来像这样?

| user_id | os1 | micro1 |
+---------+-----+--------+
| 17000   | 90  | 90     |

2 个答案:

答案 0 :(得分:1)

这要求您将来自多行的结果合并到一行中,这不容易被SQL查询处理。另外,您无法获得可变数量的字段作为结果(如果有5个主题,那该怎么办)。最好使用适当的语言在显示级别处理。

当然,存储过程会执行此操作,但这是另一个主题:-)

答案 1 :(得分:0)

根据SQL Query fields as columns之前的问题,你的代码看起来像这样:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(case when subjcode = ''',
      subjcode,
      ''' then grade end) AS ',
      subjcode
    )
  ) INTO @sql
FROM subject_table;

SET @sql = CONCAT('SELECT s.name, ', @sql, ' 
                   FROM student_table s
                   LEFT JOIN subject_table AS g 
                    ON s.user_id = g.user_id
                   GROUP BY s.name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;