GROUP BY показывает все отдельные столбцы - PullRequest
1 голос
/ 16 августа 2010

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;

КАК мне получить результат с подсчетом всех типов 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);

Ответы [ 2 ]

2 голосов
/ 16 августа 2010

В 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)

0 голосов
/ 16 августа 2010

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

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

...