我如何将AVG值视为枢轴列的一部分?

时间:2017-10-09 09:53:20

标签: mysql sql

我做了一个像这样的SQL查询:

SELECT
   tudeng.nimi, ROUND(AVG(
          CASE
            WHEN aine.nimetus = 'Kõrgem matemaatika I'
            THEN hinne.tulemus
            ELSE ''
          END
        ))
        AS KõrgemmatemaatikaI ,ROUND(AVG(
          CASE
            WHEN aine.nimetus = 'Füüsika I'
            THEN hinne.tulemus
            ELSE ''
          END
        ))
        AS FüüsikaI ,ROUND(AVG(
          CASE
            WHEN aine.nimetus = 'Raalprojekteerimine'
            THEN hinne.tulemus
            ELSE ''
          END
        ))
        AS Raalprojekteerimine , ROUND(AVG(
            CASE
              WHEN aine.nimetus = 'Tehniline graafika'
              THEN hinne.tulemus
              ELSE ''
            END
          ))
          AS Tehnilinegraafika
FROM
 tudeng

INNER JOIN
 aine_tudeng
ON
 tudeng.tudeng_id =  aine_tudeng.tudeng_id

INNER JOIN
 aine
ON
  aine.aine_id = aine_tudeng.aine_id

INNER JOIN
 hinne
ON
 hinne.aine_tudeng_id=aine_tudeng.aine_tudeng_id
GROUP BY
 tudeng.nimi

我有hinne表,其中包含许多值。我希望avg根据aine avg,但是所有乘数的当前查询id tulemus kaal liik aine_tudeng_id 1 50 1 KT 1 2 80 1 KT 2 3 40 1 KT 3 aine_tudeng_id tudeng_id aine_id 1 1 1 2 1 2 3 1 3

nimi    KõrgemmatemaatikaI  FüüsikaI    Realprojekteerimine Tehnilinegraafika   
John            17            27             13                     0

我得到的结果:

nimi    KõrgemmatemaatikaI  FüüsikaI    Realprojekteerimine Tehnilinegraafika   
John            50            80             40                 0

我期待的结果:

CREATE TABLE IF NOT EXISTS `aine` (
  `aine_id` int(11) NOT NULL AUTO_INCREMENT,
  `nimetus` varchar(255) NOT NULL,
  PRIMARY KEY (`aine_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `aine`
--

INSERT INTO `aine` (`aine_id`, `nimetus`) VALUES
(1, 'Kõrgem matemaatika I'),
(2, 'Füüsika I'),
(3, 'Raalprojekteerimine'),
(4, 'Tehniline graafika');

-- --------------------------------------------------------

--
-- Table structure for table `aine_tudeng`
--

CREATE TABLE IF NOT EXISTS `aine_tudeng` (
  `aine_tudeng_id` int(11) NOT NULL AUTO_INCREMENT,
  `tudeng_id` int(11) NOT NULL,
  `aine_id` int(11) NOT NULL,
  PRIMARY KEY (`aine_tudeng_id`),
  KEY `tudeng_id` (`tudeng_id`),
  KEY `aine_id` (`aine_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `aine_tudeng`
--

INSERT INTO `aine_tudeng` (`aine_tudeng_id`, `tudeng_id`, `aine_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3);

-- --------------------------------------------------------

--
-- Table structure for table `hinne`
--

CREATE TABLE IF NOT EXISTS `hinne` (
  `hinne_id` int(11) NOT NULL AUTO_INCREMENT,
  `tulemus` int(11) NOT NULL,
  `kaal` float NOT NULL,
  `liik` varchar(200) NOT NULL,
  `aine_tudeng_id` int(11) NOT NULL,
  PRIMARY KEY (`hinne_id`),
  KEY `aine_tudeng_id` (`aine_tudeng_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `hinne`
--

INSERT INTO `hinne` (`hinne_id`, `tulemus`, `kaal`, `liik`, `aine_tudeng_id`) VALUES
(1, 50, 0, '1', 1),
(2, 80, 0, '1', 2),
(3, 40, 1, 'KT', 3);

-- --------------------------------------------------------

--
-- Table structure for table `tudeng`
--

CREATE TABLE IF NOT EXISTS `tudeng` (
  `tudeng_id` int(11) NOT NULL AUTO_INCREMENT,
  `nimi` varchar(255) CHARACTER SET utf8 COLLATE utf8_estonian_ci NOT NULL,
  `m_number` varchar(10) NOT NULL,
  PRIMARY KEY (`tudeng_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `tudeng`
--

INSERT INTO `tudeng` (`tudeng_id`, `nimi`, `m_number`) VALUES
(1, 'Raivo', 'AA'),
(2, 'Jüri', 'AB'),
(3, 'Jaak', 'BA'),
(4, 'Martin', 'BB');

--
-- Constraints for dumped tables
--

--
-- Constraints for table `aine_tudeng`
--
ALTER TABLE `aine_tudeng`
  ADD CONSTRAINT `aine_tudeng_ibfk_1` FOREIGN KEY (`tudeng_id`) REFERENCES `tudeng` (`tudeng_id`),
  ADD CONSTRAINT `aine_tudeng_ibfk_2` FOREIGN KEY (`aine_id`) REFERENCES `aine` (`aine_id`);

--
-- Constraints for table `hinne`
--
ALTER TABLE `hinne`
  ADD CONSTRAINT `hinne_ibfk_1` FOREIGN KEY (`aine_tudeng_id`) REFERENCES `aine_tudeng` (`aine_tudeng_id`);

有没有办法解决这个问题?

我的SQL数据结构:

videoView

1 个答案:

答案 0 :(得分:1)

答案是you have to eliminate zero values from AVG,已添加到SQLFiddle

AVG(NULLIF(field ,0))

示例:

ROUND(AVG(NULLIF(
          CASE
            WHEN aine.nimetus = 'Kõrgem matemaatika I'
            THEN hinne.tulemus
            ELSE 0
          END
        ,0)
        ))
        AS KõrgemmatemaatikaI