GROUP BY показывает все отдельные столбцы

mysql> select * from products;

+---------+-------------+-----------+------+
| prod_id | prod_source | prod_type | flag |
+---------+-------------+-----------+------+
|       1 | USA         |         2 |    0 |
|       2 | USA         |         2 |    0 |
|       3 | USA         |         2 |    0 |
|       4 | USA         |         3 |    1 |
|       5 | USA         |         3 |    0 |
|       6 | BRA         |         1 |    1 |
|       7 | BRA         |         2 |    1 |
+---------+-------------+-----------+------+

Требуемый результат:

+-----------+----------+
| prod_type | count(*) |
+-----------+----------+
|         2 |        3 |
|         3 |        0 |
|         4 |        0 |
+-----------+----------+


where condition
 prod_source = USA
 flag=0

, но я получаю набор результатов

+-----------+----------+
| prod_type | count(*) |
+-----------+----------+
|         2 |        3 |
+-----------+----------+

с запросом

 SELECT prod_type ,count(*) 
   FROM products
   WHERE prod_source='USA'  and flag=0  
   GROUP by prod_type 
   ORDER by prod_type;

КАК мне получить результат с count из всех prod_type в США? Он должен отображать все типы prod_type в США, даже если число равно 0.

Определение таблицы:

CREATE TABLE `products` (
  `prod_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `prod_source` VARCHAR(45) NOT NULL,
  `prod_type` INTEGER UNSIGNED NOT NULL,
  `flag` INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY (`prod_id`)
)
ENGINE = InnoDB;

Вставка данных:

INSERT INTO `products` 
VALUES (1,'USA',2,0),
       (2,'USA',2,0),
       (3,'USA',2,0),
       (4,'USA',3,1),
       (5,'USA',4,1),
       (6,'BRA',1,1),
       (7,'BRA',2,1);
1
задан Agustin Meriles 7 May 2013 в 12:49
поделиться

2 ответа

В SQL Server я бы использовал следующее:

SELECT prod_type,SUM(CASE WHEN flag=0 THEN 1 ELSE 0 END)
FROM products
   WHERE prod_source='USA' 
   GROUP by prod_type 
   ORDER by prod_type

Я не могу сказать, будет ли то же самое работать в MySQL.

(Смелое изменение для исправления имени столбца в предложении SELECT)

2
ответ дан 2 September 2019 в 22:08
поделиться

Проверьте данные, запрос корректен, но данные в верхней таблице не соответствуют сценарию вставки (prod_id 5 вставляется с flag = 1)

Чтобы получить 0s, вам нужно выбрать отличительный prod_type, затем присоединить его слева к текущему запросу.

0
ответ дан 2 September 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: