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

Antworten:


276

verwenden

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

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.


31

Du warst nah :-)

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

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'

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; 

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


-5

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

SELECT COUNT(*) FROM t1 GROUP BY keywork;

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.