2009-06-16 9 views
99

est quelque chose comme cela possible:En utilisant DISTINCT et COUNT ensemble dans un MySQL Query

SELECT DISTINCT COUNT(productId) WHERE keyword='$keyword' 

Ce que je veux est d'obtenir le nombre de produit unique Ids qui sont associés à un mot-clé. Le même produit peut être associé deux fois avec un mot-clé, ou plus, mais je voudrais seulement 1 fois être comptées par produit ID

Répondre

221

utilisation

SELECT COUNT(DISTINCT productId) from table_name WHERE keyword='$keyword' 
+0

Mis à jour la réponse car il est proche de devenir une bonne réponse et il était syntaxiquement incorrect. –

+0

Im contre des réponses qui n'offrent pas une performance optimale en ce qui concerne les bases de données. Il est essentiel de conserver les normes de performance. J'y retournerais avec la réponse de @ alistair-hart. – JDuarteDJ

+0

Grand homme. Cela fonctionne –

30

Vous étiez proche :-)

select count(distinct productId) from table_name where keyword='$keyword' 
+0

Mis à jour la réponse car il est proche de devenir une bonne réponse et il était syntaxiquement incorrect. –

+0

faible performance – JDuarteDJ

-4

N'est-ce pas mieux avec un groupe? Quelque chose comme:

SELECT COUNT(*) FROM t1 GROUP BY keywork; 
+1

Il veut le nombre de productID distincts. Votre requête renvoie le nombre de lignes pour chaque mot clé. – David

41

je ferais quelque chose comme ceci:

Select count(*), productid 
from products 
where keyword = '$keyword' 
group by productid 

qui vous donnera une liste comme

count(*) productid 
---------------------- 
5   12345 
3   93884 
9   93493  

Cela vous permet de voir combien de chaque ProductID distincts L'identifiant est associé au mot clé.

+0

Basse performance, ne peut pas accepter cela sur la réponse d'Alistair. – JDuarteDJ

14

Pour votre information, ce qui est probablement plus rapide,

SELECT count(1) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp 

que cela,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword' 
+15

Ça vous dérange d'expliquer pourquoi? Je suis curieux. – lpacheco

+0

Vous ne savez pas si c'est plus rapide, mais comment compter plusieurs colonnes avec un mot clé distinct – VladL

+0

Réponse fantastique. Sa réponse est au moins 100 fois plus rapide dans mon cas. Une légère modification pour comprendre le code d'Alistair est SELECT count (*) FROM (SELECT productId WHERE mot clé = '$ keyword') temp' –

5

Qu'est-ce que l'enfer de tout ce travail anthères

il est trop simple

si vous voulez une liste de combien de productId dans chaque clé mot ici c'est le code

SELECT count(productId), keyword FROM `Table_name` GROUP BY keyword; 
+0

Merci pour ce commentaire, pas la réponse puriste à sa question exacte, mais peut-être ce qu'il cherche pour, et de toute façon utile. – Leo