MySQL 쿼리에서 DISTINCT와 COUNT를 함께 사용


125

다음과 같은 것이 가능합니까?

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

내가 원하는 것은 키워드와 관련된 고유 제품 ID의 수를 얻는 것입니다. 동일한 제품이 키워드와 두 번 이상 연결될 수 있지만 제품 ID 당 1 회만 계산하고 싶습니다.

답변:


277

사용하다

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

훌륭한 답변이되기에 가까워졌고 구문 적으로 잘못 되었기 때문에 답변을 업데이트했습니다.
Rahul Tripathi 2014 년

Im은 데이터베이스와 관련하여 최적의 성능을 제공하지 않는 답변에 반대합니다. 성능 표준을 유지하는 것이 중요합니다. @ alistair-hart의 대답으로 갈 것입니다.
JDuarteDJ

다른 것을 찾는 동안 이것을 우연히 발견하고 무언가를 배웠습니다. 저는 항상 SELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'. 나는 당신의 버전이 두 개의 매개 변수를 COUNT( ).
Rockin4Life33

놀랍게도 최소한 MariaDB 10.1.41 버전에서는 "COUNT"와 여는 괄호 사이에 공백이있을 수 없다는 것을 알았습니다.
DRosenfeld

61

나는 다음과 같이 할 것입니다.

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

그것은 당신에게 다음과 같은 목록을 줄 것입니다

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

이를 통해 키워드와 연관된 각 고유 productid ID의 수를 볼 수 있습니다.


31

당신은 가까웠습니다 :-)

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

좋은 답변이되기에 가까워지고 구문 적으로 틀 렸기 때문에 답변을 업데이트했습니다.
Rahul Tripathi 2014 년

19

참고로 이것은 아마도 더 빠를 것입니다.

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

이것보다,

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

더 빠른지 확실하지 않지만 고유 한 키워드로 여러 열을 계산하는 방법
VladL 2014 년

환상적인 대답입니다. 그의 대답은 제 경우에 적어도 100 배 더 빠릅니다. 알리스 테어의 코드 @ 이해하기위한 약간의 변경입니다SELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS

6

이 모든 일의 도대체 꽃밥

너무 간단 해

여기에 각 키워드의 productId가 얼마인지 목록이 필요하면 코드입니다.

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

그의 정확한 질문에 대한 순수한 대답이 아니라 그가 찾고있는 것, 그리고 어쨌든 유용 할 수도있는 그 코멘트에 감사드립니다.
Leo

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
그는 고유 한 productID의 수를 원합니다. 쿼리는 각 키워드의 행 수를 반환합니다.
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.