Помогите с запросом SQL - PullRequest
1 голос
/ 27 июня 2009

Допустим, у меня есть одна таблица под названием "ОБЗОРЫ"

В этой таблице есть отзывы, написанные клиентами для различных продуктов.

Я бы хотел получить «счет» для всех отзывов, написанных каждым клиентом, так что я пишу:

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

Теперь, моя проблема в том, что я хочу иметь подсчет, как указано выше, НО только для клиентов, которые написали ОСОБЫЙ обзор продукта

Например,

SELECT customers_review
FROM reviews
WHERE
products_id = '170' 

Таким образом, я хочу, чтобы клиенты могли получить ПОЛНЫЙ СЧЕТ для каждого написанного ими отзыва, но ТОЛЬКО для клиентов, написавших отзыв для определенного продукта.

Большое спасибо за вашу помощь.

Ответы [ 5 ]

8 голосов
/ 27 июня 2009
select customers_id, count(*)
from reviews
where customers_id in 
(select customers_id from reviews where products_id = '170')
group by customers_id;
3 голосов
/ 27 июня 2009
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

Это привлечет любого клиента, который писал о продукте X, а затем подсчитает общее количество опубликованных отзывов.

1 голос
/ 27 июня 2009
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.

1 голос
/ 27 июня 2009

Просто добавьте в конец вашего первого запроса

WHERE EXISTS (
SELECT 1 FROM reviews AS r 
WHERE r.customers_id = reviews.customers_id 
    AND product_id = '170')
GROUP BY reviews.customers_id
0 голосов
/ 15 апреля 2010

Не согласен с подходами в этой теме. Но я думаю, что оконный / аналитический 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

- ВЫВОД -

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...