Використання DISTINCT та COUNT разом у MySQL Query


125

Чи можливо щось подібне:

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

Мені потрібно отримати кількість унікальних ідентифікаторів продуктів, пов’язаних із ключовим словом. Один і той же продукт може бути пов'язаний двічі з ключовим словом або більше, але я хотів би рахувати лише 1 раз за ідентифікатором продукту

Відповіді:


277

використання

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

Оновлено відповідь, оскільки вона близька, щоб стати чудовою відповіддю, і вона була синтаксично неправильною.
Рахул Трипаті

Я проти відповідей, які не дають оптимальної продуктивності, коли мова йде про бази даних. Важливо дотримуватися стандартів виконання. Я б пішов з відповіддю @ alistair-hart.
JDuarteDJ

Натрапив на це, шукаючи чогось іншого і чогось навчився. Я завжди робив це з SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. Мені подобається, що ваша версія краще передає два парами COUNT( ).
Rockin4Life33

На мій подив, я виявив, що між "COUNT" та початковими дужками не може бути пробілу - принаймні у версії 10.1.41 MariaDB.
DRosenfeld

61

Я б зробив щось подібне:

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

це дасть вам такий список

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

Це дозволяє вам побачити, скільки кожного окремого ідентифікатора продукту пов'язано з ключовим словом.


31

Ви були поруч :-)

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

Оновлено відповідь, оскільки вона близька, щоб стати гарною відповіддю, і вона була синтаксично неправильною.
Рахул Трипаті

19

FYI, це, мабуть, швидше,

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

ніж це,

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

Не впевнений, чи швидше це, але спосіб підрахунку кількох стовпців із чітким ключовим словом
VladL

Фантастична відповідь. Його відповідь принаймні у 100 разів швидша в моєму випадку. Невелика зміна для розуміння коду @ AlistairSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS

6

Що за чорт у всьому цьому працюють пильниці

це занадто просто

якщо ви хочете список того, скільки productId у кожному ключовому слові, тут це код

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

Дякую за цей коментар, не за пуристську відповідь на його точне запитання, але, можливо, те, що він шукає, і все одно корисне.
Лев

4

ВИБІР ВИДАЛЕННЯ ПРОДУКТУ ТА РОЗМІРУВАННЯ РОЗКЛАДУ ПРОДУКТУ

для ще однієї відповіді на цей тип запитань - це ще одна моя відповідь на отримання підрахунку продуктової бази на назві товару, відмінною як цей зразок нижче:

Значення таблиці

select * FROM Product

Нарахована назва продукту

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

Кількість записів: 4; Час виконання: 2ms


-5

Хіба не краще з групою? Щось на зразок:

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
Він хоче кількість різних ідентифікаторів productDid. Ваш запит повертає кількість рядків для кожного ключового слова.
Девід,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.