Функция MySQL SUM и оператор CASE - PullRequest
0 голосов
/ 15 марта 2012
SELECT 
    CASE schuleArtID 
        WHEN 1 THEN SUM(schuleSummeSchueler) / 8
        WHEN 2 THEN SUM(schuleSummeSchueler) / 6 * 0.8
        WHEN 3 THEN SUM(schuleSummeSchueler) / 6 * 0.8
        WHEN 4 THEN SUM(schuleSummeSchueler) / 5 * 0.8
        WHEN 5 THEN SUM(schuleSummeSchueler) / 3 * 0.5
        WHEN 6 THEN SUM(schuleSummeSchueler) / 3 * 0.8
    END AS potenzial
FROM 
    sys_theorie_schule
WHERE
    filialID = '311'
GROUP BY
    schuleArtID

Это работает, но теперь мне нужна сумма, потому что есть несколько строк.

SELECT 
    SUM(
        CASE schuleArtID 
            WHEN 1 THEN SUM(schuleSummeSchueler) / 8
            WHEN 2 THEN SUM(schuleSummeSchueler) / 6 * 0.8
            WHEN 3 THEN SUM(schuleSummeSchueler) / 6 * 0.8
            WHEN 4 THEN SUM(schuleSummeSchueler) / 5 * 0.8
            WHEN 5 THEN SUM(schuleSummeSchueler) / 3 * 0.5
            WHEN 6 THEN SUM(schuleSummeSchueler) / 3 * 0.8
        END
    ) AS potenzial
FROM 
    sys_theorie_schule
WHERE
    filialID = '311'
GROUP BY
    schuleArtID

Здесь я получаю только результат [Err] 1111 - Invalid use of group function.

Вотструктура таблицы (извините за немецкие названия столбцов):

CREATE TABLE `sys_theorie_schule` (
  `schuleID` int(11) NOT NULL AUTO_INCREMENT,
  `filialID` int(11) NOT NULL,
  `schuleName` varchar(255) NOT NULL,
  `schuleStrasse` varchar(255) NOT NULL,
  `schulePlz` varchar(8) NOT NULL,
  `schuleOrt` varchar(255) NOT NULL,
  `schuleArtID` int(11) NOT NULL,
  `schuleSummeSchueler` int(11) NOT NULL,
  `schuleEntfernung` int(11) NOT NULL,
  `online` tinyint(1) NOT NULL DEFAULT '1',
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`schuleID`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

MySQL-версия: 5.0.51a-24 + lenny5

Может кто-нибудь помочь, пожалуйста?Большое спасибо!

1 Ответ

3 голосов
/ 15 марта 2012

Попробуйте:

SELECT 
    SUM(
        CASE schuleArtID 
            WHEN 1 THEN schuleSummeSchueler / 8
            WHEN 2 THEN schuleSummeSchueler / 6 * 0.8
            WHEN 3 THEN schuleSummeSchueler / 6 * 0.8
            WHEN 4 THEN schuleSummeSchueler / 5 * 0.8
            WHEN 5 THEN schuleSummeSchueler / 3 * 0.5
            WHEN 6 THEN schuleSummeSchueler / 3 * 0.8
        END
    ) AS potenzial
FROM 
    sys_theorie_schule
WHERE
    filialID = '311'

Вы не можете суммировать выражение, которое уже включает сумму, и нет смысла группировать по schuleArtID, если вы хотите получить общую сумму.

...