0

我的桌子是

表 1 是

         class_name    subject_Name

              I class         telugu
              I class          hindi
              II class         telugu
              II class          hindi

表2是

         exam_name    telugu   hindi

            unit 1      25      35
            unit 2      30      35

现在我在 table1 中插入一行主题数学。该主题已作为列添加到 table2 中,并检查主题(数学)是否存在于 table2 中。

我需要的输出是


表 1 是

         class_name    subject_Name

              I class         telugu
              I class          hindi
              II class         telugu
              II class          hindi
              II class         maths
              III class          hindi
              III class         telugu
              III class          maths

表2是

         exam_name    telugu   hindi  maths

            unit 1      25      35     35
            unit 2      30      35      25

提前致谢....

4

1 回答 1

2

我将使用这些列重组表 2 以对其进行规范化:

考试名称、科目、分数

使用主键exam_name,主题

然后,您将能够查询它以获取不同科目的所有分数。

桌子:

mysql> SELECT * FROM t2;
+-----------+---------+-------+
| exam_name | subject | score |
+-----------+---------+-------+
| unit1     | hindi   |    25 |
| unit1     | telugu  |    45 |
| unit2     | math    |    15 |
| unit2     | telugu  |    25 |
+-----------+---------+-------+

您现在可以查询:首先您需要找出所有主题:

SELECT DISTINCT subject from t2;

现在您可以使用主题创建数据透视表:

SELECT exam_name, details.hindi, details.telugu, details.math 
FROM (
   SELECT exam_name, 
          SUM(if(subject='hindi',score,0)) AS hindi, 
          SUM(if(subject='telugu', score, 0)) AS telugu, 
          SUM(if(subject='math', score, 0)) AS math 
   FROM t2 GROUP BY exam_name

) AS details ;

+-----------+-------+--------+------+
| exam_name | hindi | telugu | math |
+-----------+-------+--------+------+
| unit1     |    25 |     45 |    0 |
| unit2     |     0 |     25 |   15 |
+-----------+-------+--------+------+

查找数据透视表以获取更多详细信息。此解决方案假定表中的每个考试名称/主题组合只有一个条目。

您也许可以将这两个步骤组合在一个复杂的查询中。根据您是否从脚本中调用它,这可能会也可能不会更可取。

于 2013-07-16T15:40:21.553 回答