Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Подскащите с простым запросом по COUNT


Автор: maxipub 18.5.2017, 16:24
Добрый день!

Есть таблица:

Код

CREATE TABLE IF NOT EXISTS `test6` (
  `param` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `test6`
--

INSERT INTO `test6` (`param`) VALUES
(0),
(1),
(2),
(3),
(4),
(5),
(0),
(0);


Необходимо выбрать количество столбцов с param=0, и количество всех остальных столбцов. Первое что приходит на ум:

Код

(SELECT COUNT(1) FROM `test6` WHERE param=0) UNION (SELECT COUNT(1) FROM `test6` WHERE param>0)


Но я стараюсь не использовать UNION запросы. Возможно, есть другие варианты?

ЗЫ: для упрощения создал тестовую таблицу, в реальной там еще хороший хвост в WHERE - который при таком UNION еще придется и дублировать...

Автор: Akina 18.5.2017, 20:46
Код

SELECT SUM(param=0) zero
     , SUM(param>0) positive
FROM test6;

Автор: maxipub 19.5.2017, 09:16
Я в шоке. Не знал что эту функцию можно использовать так. smile 

Автор: Akina 19.5.2017, 10:15
Проверка условия даёт True либо False. При использовании в числовом контексте (а SUM требует именно этого) они конвертируются в 1 и 0 соответственно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)