MySQL переключатель - PullRequest
       13

MySQL переключатель

4 голосов
/ 12 марта 2011

У меня есть структура запроса, как показано ниже, мне интересно, есть ли способ записать запросы select как один, используя операторы CASE или каким-либо другим способом, чтобы значения были вставлены в соответствующие переменные на основе их значений.

DECLARE passes INT;
DECLARE fails INT;
..

SELECT count(score)
INTO passes
  FROM scores
 WHERE score >= 40;

SELECT count(score)
INTO fails
  FROM scores
 WHERE score < 40;

Мердок придумал аккуратное решение этой проблемы, мне просто нужно было внести одно изменение, чтобы поместить каждое из значений в соответствующие переменные

SELECT * 
INTO   passes, fails 
FROM  (SELECT SUM(CASE 
                    WHEN score >= 40 THEN 1 
                    ELSE 0 
                  END) AS _passes, 
              SUM(CASE 
                    WHEN score < 40 THEN 1 
                    ELSE 0 
                  END) AS _fails 
       FROM   scores) AS x; 

Ответы [ 2 ]

9 голосов
/ 12 марта 2011

Вы можете сделать это, выполнив кейс для каждой оценки и вернув 1 или 0. Затем обернув все это в СУММУ (не СЧЕТ), добавив по одному для каждого экземпляра, соответствующего кейсу.

SELECT 
SUM(CASE WHEN score >= 40 THEN 1 ELSE 0 END) AS passes, 
SUM(CASE WHEN score < 40 THEN 1 ELSE 0 END) AS fails 
FROM scores
3 голосов
/ 31 мая 2012
DECLARE tpasses INT;
DECLARE tfails INT;

SELECT 
    SUM(CASE WHEN score >= 40 THEN 1 ELSE 0 END) AS passes, 
    SUM(CASE WHEN score < 40 THEN 1 ELSE 0 END) AS fails 
INTO tpasses, tfails 
FROM scores
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...