2009-06-26 3 views
1

"리뷰"라는 테이블 하나가 있다고합시다.SQL 쿼리에 대한 도움말

이 표에는 고객이 다양한 제품에 대해 작성한 리뷰가 있습니다.

내가 그래서 내가 쓰기, 각 고객이 작성했습니다 모든 리뷰에 대한 "수"를 얻을 수 있도록하고 싶습니다

:

이제
SELECT count(*) AS counter 
FROM reviews 
WHERE customers_id = 12345 

, 내 문제는 내가 카운트를 원하는 것입니다 요약

SELECT customers_review 
FROM reviews 
WHERE 
products_id = '170' 

, 이상하지만 특정 제품 리뷰

예를 들어

를 작성한 고객을위한처럼, 나는 고객 사양을 얻을 수 있기를 바랍니다 고객이 작성한 모든 리뷰에 대해 TOTAL COUNT, 특정 제품에 대한 리뷰를 작성한 고객에게만 제공됩니다.

도움 주셔서 감사합니다.

+0

이 저를 도와 주셔서 모두 감사합니다, 너희들 바위! –

+0

@Sebastian, 이제 질문에 대한 답변을 얻었으니 제목을 좀 더 구체적으로 편집 할 수 있을까요? 나는 여기에 얼마나 많은 질문이 동일한 제목을 가지고 있는지 생각하기가 싫다. –

답변

8
select customers_id, count(*) 
from reviews 
where customers_id in 
(select customers_id from reviews where products_id = '170') 
group by customers_id; 
+0

무승부가 빨라진다. – TheTXI

+0

존재하는 것보다 빠를 것입니다 –

+0

Carl, 제안 해 주셔서 감사합니다.하지만 사이드 노트로 나에게 제안한이 쿼리 (EXISTS 유사 콘텐츠 포함)는 내 질문에 8 ~ 14 초가 걸립니다. MYSQL 사이트, 이것을 최적화하여 최적화 할 수 있다고 생각하십니까? 덕분에 ... –

1

그냥이 제품 X에 대해 쓴 모든 고객을 끌어

WHERE EXISTS (
SELECT 1 FROM reviews AS r 
WHERE r.customers_id = reviews.customers_id 
    AND product_id = '170') 
GROUP BY reviews.customers_id 
3
SELECT customers_id, COUNT(*) AS counter 
FROM reviews 
WHERE customers_id IN(
SELECT customers_id 
FROM reviews 
WHERE 
products_id = '170' 
) 
GROUP BY customers_id 

첫 번째 쿼리의 마지막에 추가 한 다음 리뷰의 총 수를 카운트 그들은 게시했습니다.

+0

젠장 27 초 차이, 이것은 거의 단어입니다! LOL – TheTXI

+1

+1 (별칭)에 별칭을 부여하기 위해 – Lazlow

1
Select customer_ID, Count(*) 
FROM reviews 
WHERE customer_ID in (Select Customer_ID from reviews where products_id = '170') 
Group By customer_ID 

이 모든 리뷰의 개수와 함께 여러분 모두의 CustomerID 년대의 목록을 제공해야하지만, 그것은 단지와 의견이 맞지 않음 제품 (170)

+0

S'okay 우리는 모두 이겼다 .--) –

+0

Ian : 나는 똑같지 만 나보다 빠른 대답을 모두 표결했다 : P – TheTXI

0

에 대한 리뷰 남아있는 고객으로 제한합니다 이 스레드의 접근 방식. 하지만 윈도우/분석 SQL은이 문제를 조사하는 또 다른 방법이라고 생각합니다. 에이 제품에 고객이 세부 행에 제품으로 리뷰의

  • 카운트이 세부 행 리뷰의
  • 카운트에 고객이 리뷰의

    • 카운트 : 당신은 수를 얻을 수 있습니다 이 세부 행
    • 모든 세부 사항 (검토의 텍스트는 검토 ID 등)
    ,

    SQL 문

    SELECT 
    revid, 
    CUSTID, 
    PRODID, 
    COUNT (*) OVER (PARTITION BY custid) ByCust, 
    COUNT (*) OVER (PARTITION BY prodid) ByProd, 
    COUNT (*) OVER (PARTITION BY prodid, custid) ByCustProd 
    
    FROM customer_reviews 
    ORDER BY custid, prodid 
    

    --OUTPUT--

    1520 106 1900 16 604 3 
    4650 106 1900 16 604 3 
    2730 106 1900 16 604 3 
    4640 106 3900 16 254 1 
    6287 110 1900 28 604 2 
    5849 110 1900 28 604 2 
    5965 110 3900 28 254 2 
    6117 110 3900 28 254 2