2010-08-16 13 views
1

mysql>select * from products;GROUP BY montre toutes les colonnes distinctes

+---------+-------------+-----------+------+ 
| 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 | 
+---------+-------------+-----------+------+ 

resulset requis:

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


where condition 
prod_source = USA 
flag=0 

mais je reçois resultset est

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

avec la requête

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

Comment puis-je obtenir le résulset avec le nombre de tous les prod_type aux États-Unis? Il doit afficher tous les prod_type aux USA même si le compte est 0.

définition de la table:

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; 

insertion des données:

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

Répondre

0

Vérifiez vos données, la requête est correcte mais vos données dans la table ne correspond pas au script d'insertion (prod_id 5 est inséré avec flag = 1)

Pour obtenir les 0, vous devez sélectionner le prod_type distinct puis joignez-le à votre requête actuelle.

2

Dans SQL Server, j'utiliser les éléments suivants:

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 

Je ne peux pas dire si le même travaillerait en MySQL.

(Correctement édité pour corriger le nom de colonne dans la clause SELECT)

+0

Il fonctionne bien aussi dans mysql. Dans une requête select, utilisez prod_type au lieu de prod_id. utiliser comme cette SELECT prod_type, SUM (CASE WHEN flag = 0 1 0 ELSE FIN) DE produits OU prod_source = 'USA' GROUP par prod_type Classez par prod_type – Karthik