Совместное использование DISTINCT и COUNT в запросе MySQL

125

Возможно ли что-то подобное:

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

Я хочу получить количество уникальных идентификаторов продуктов, связанных с ключевым словом. Один и тот же продукт может быть связан с ключевым словом дважды или более, но я бы хотел, чтобы для каждого идентификатора продукта учитывался только один раз.

Нажмите Голосовать за
источник

Ответы:

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 01
К своему удивлению, я обнаружил, что не может быть пробела между «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    

Это позволяет увидеть, сколько идентификаторов каждого продукта связано с ключевым словом.

Gratzy
источник
31

Вы были близки :-)

select count(distinct productId) from table_name where keyword='$keyword'
tekBlues
источник
Обновлен ответ, поскольку он близок к тому, чтобы стать хорошим ответом, и был синтаксически неверным.
Рахул Трипати
19

К вашему сведению, это, вероятно, быстрее,

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; Время выполнения: 2 мс

Рхалп Даррен Кабрера
источник
-5

Разве не лучше с группой? Что-то вроде:

SELECT COUNT(*) FROM t1 GROUP BY keywork;
Macarse
источник
1
Ему нужно количество различных productID. Ваш запрос возвращает количество строк для каждого ключевого слова.
Дэвид