Verwenden von DISTINCT und COUNT zusammen in einer MySQL-Abfrage

124

Ist so etwas möglich:

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

Ich möchte die Anzahl der eindeutigen Produkt-IDs ermitteln, die einem Schlüsselwort zugeordnet sind. Das gleiche Produkt kann zweimal mit einem Schlüsselwort oder mehr verknüpft sein, aber ich möchte, dass nur 1 Mal pro Produkt-ID gezählt wird

Klicken Sie auf Upvote
quelle

Antworten:

276

verwenden

SELECT COUNT(DISTINCT productId) from  table_name WHERE keyword='$keyword'
David
quelle
Die Antwort wurde aktualisiert, da sie bald zu einer großartigen Antwort wird und syntaktisch falsch war.
Rahul Tripathi
Ich bin gegen Antworten, die keine optimale Leistung bieten, wenn es um Datenbanken geht. Es ist wichtig, die Leistungsstandards einzuhalten. Ich würde mit der Antwort von @ alistair-hart gehen.
JDuarteDJ
Stolperte darüber, während ich nach etwas anderem suchte und etwas lernte. Ich habe das immer gemacht mit SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Ich mag deine Version besser, wenn du zwei Parameter weitergibst COUNT( ).
Rockin4Life33
Zu meiner Überraschung stellte ich fest, dass zwischen "COUNT" und der öffnenden Klammer kein Leerzeichen stehen darf - zumindest in Version 10.1.41 von MariaDB.
DRosenfeld
61

Ich würde so etwas machen:

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

das gibt Ihnen eine Liste wie

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

Auf diese Weise können Sie sehen, wie viele der einzelnen Produkt-IDs dem Schlüsselwort zugeordnet sind.

Gratzy
quelle
31

Du warst nah :-)

select count(distinct productId) from table_name where keyword='$keyword'
tekBlues
quelle
Die Antwort wurde aktualisiert, da sie bald zu einer guten Antwort wird und syntaktisch falsch ist.
Rahul Tripathi
19

Zu Ihrer Information, das ist wahrscheinlich schneller,

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

als das,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword'
Alistair Hart
quelle
Nicht sicher, ob es schneller ist, aber die Möglichkeit, mehrere Spalten mit einem bestimmten Schlüsselwort zu zählen
VladL
Fantastische Antwort. Seine Antwort ist in meinem Fall mindestens 100-mal schneller. Eine kleine Änderung für das Verständnis von @ Alistair Code istSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS
6

Was zum Teufel von all dieser Arbeit Staubbeutel

es ist zu einfach

Wenn Sie eine Liste mit der Produkt-ID in jedem Schlüsselwort wünschen, ist dies der Code

SELECT count(productId),  keyword  FROM `Table_name` GROUP BY keyword; 
George SEDRA
quelle
Vielen Dank für diesen Kommentar, nicht die puristische Antwort auf seine genaue Frage, aber vielleicht das, wonach er sucht und trotzdem nützlich.
Leo
4

AUSWAHL DES UNTERSCHIEDLICHEN PRODUKTS UND ANZEIGEZAHL PRO PRODUKT

Für eine andere Antwort zu dieser Art von Frage ist dies meine andere Antwort, um die Anzahl der Produkte anhand des Produktnamens zu ermitteln, der sich wie in diesem Beispiel unten unterscheidet:

Tabellenwert

select * FROM Product

Produktname gezählt

SELECT DISTINCT(Product_Name),
(SELECT COUNT(Product_Name) 
from Product  WHERE Product_Name = Prod.Product_Name)  
as `Product_Count`
from Product as Prod

Datensatzanzahl: 4; Ausführungszeit: 2ms

Rhalp Darren Cabrera
quelle
-5

Ist es nicht besser mit einer Gruppe von? Etwas wie:

SELECT COUNT(*) FROM t1 GROUP BY keywork;
Macarse
quelle
1
Er möchte die Anzahl der unterschiedlichen Produkt-IDs. Ihre Abfrage gibt die Anzahl der Zeilen für jedes Schlüsselwort zurück.
David