Группировка по двумя полям и COUNT

290
21 января 2017, 11:23

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

CREATE TABLE IF NOT EXISTS `status` 
(
  `hosts` text,
  `numb` text,
  `region` text,
  `status` varchar(2) DEFAULT NULL,
  `t_tim` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=34;
INSERT INTO `status` (`hosts`, `numb`, `region`, `status`, `t_tim`) VALUES
('SIU02', '234', 'POV', '1', '2017-01-18 03:44:01'),
('SIU04', '44', 'POV', '1', '2017-01-18 03:44:01'),
('SIU03', '24234', 'POV', '1', '2017-01-18 03:44:01'),
('SIU01', '24234', 'POV', '1', '2017-01-18 03:44:01'),
('SIU02', '24234', 'SZ', '1', '2017-01-18 03:44:01'),
('SIU01', '22', 'SIB', '1', '2017-01-18 03:44:01'),
('SIU02', '34', 'SIB', '1', '2017-01-18 03:44:01'),
('SIU03', '422', 'SIB', '1', '2017-01-18 03:44:01'),
('SIU04', '23456', 'SIB', '1', '2017-01-18 03:44:01'),
('SIU05', '46', 'SIB', '1', '2017-01-18 03:44:01'),
('SIU07', '324234', 'SIB', '2', '2017-01-18 08:45:12'),
('SU_FTP', '324', 'MSK', '0', '2017-01-18 03:44:01'),
('SIU01', '34234', 'SZ', '1', '2017-01-18 03:44:01'),
('SIU08', '23443', 'SIB', '1', '2017-01-18 03:44:01'),
('SIU04', '3444', 'SZ', '1', '2017-01-18 03:44:01'),
('SIU03', '1555', 'SZ', '1', '2017-01-18 03:44:01'),
('SIU05', '1055', 'SZ', '1', '2017-01-18 03:44:01'),
('S_FTP', '1223', 'SZ', '1', '2017-01-18 03:44:01'),
('SIU01', '1232333', 'UG', '2', '2017-01-18 08:45:20'),
('SIU02', '134234', 'UG', '1', '2017-01-18 03:44:01'),
('SIU03', '155', 'UG', '1', '2017-01-18 03:44:01'),
('SIU04', '14545', 'UG', '1', '2017-01-18 03:44:01'),
('S_FTP', '1454', 'UG', '2', '2017-01-18 08:45:23'),
('S_FTP', '14545', 'POV', '2', '2017-01-18 08:45:06');

Как построить выборку, чтобы выводилась сумма значений status по каждому region? Для status=1, status=2, status=3, status=0 с группировкой по region.

Не могу составить выборку, т.к. не знаю что делать, если для region не будет, например, значения status=2.

В итоге должно быть, например:

region--status--count
POV----1--------4
Answer 1
SELECT region,status, COUNT(*)
FROM `status`
WHERE status IN (0, 1, 2, 3)
GROUP BY region, status
Answer 2
SELECT `status`.`region`, `status`.`status`, COUNT(*)
FROM `status`
GROUP BY `status`.`region`, `status`.`status`;
Answer 3

Спасибо за помощь!

SELECT
  region,
  status,
  COUNT(*)
FROM `status`
WHERE status IN (0, 1, 2, 3)
GROUP BY region,status
READ ALSO
Что такое индекс mysql и как их использовать

Что такое индекс mysql и как их использовать

Можете привести понятный пример индекса в таблицах? В документациях столько всего написано, это вводит в заблуждениеИндекс - это и есть первичный...

275
Как добавить(прибавить) значение в поле MySQL?

Как добавить(прибавить) значение в поле MySQL?

Как добавить в поле БД значение, не перезаписывая его ? Например, добавить в поле words БД users значения (сначала одно, потом второе и пр), НО только...

320
Espresso тест на ожидание

Espresso тест на ожидание

Есть следующий тест, который при переходе в форму логина, вводит некорректные данные, в ответ на которые ему выводится дилоговое окно с текстом...

386
Тест не проходит

Тест не проходит

Есть вспомогательный класс DialogIdlingResource, благодаря которому пытаюсь запустить свои тесты, все тесты проходят за исключением этого запускается...

298