Сгруппировать по х, где у = А и В и С - PullRequest
3 голосов
/ 06 апреля 2011

У меня есть таблица, в которой хранится информация о цене товара.Имеется столбец для идентификатора продукта, количества и скидки.(Пользователи, покупающие 2, получают скидку в 1 фунт стерлингов, покупатели 3 получают скидку в 2 фунта стерлингов и т. Д.).

Я хотел бы получить все товары, которые имеют определенные скидки на количество, связанные с ними.Например, только продукты, у которых есть 5, 10 и 20 фунтов на покупку 1,2 или 3 соответственно.

Как я могу это сделать?

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

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Не проверено (зависит от вашей схемы), но вот идея:

SELECT P.id, count(P.id)
FROM products P
  LEFT JOIN discounts D ON P.id = D.product_id
WHERE
  (D.quantity = 1 AND D.amount = 5)
  OR (D.quantity = 2 AND D.amount = 10)
  OR (D.quantity = 3 AND D.amount = 20)
GROUP BY P.id
HAVING count(P.id) = 3
1 голос
/ 06 апреля 2011

Я получил

SELECT * FROM table WHERE ProductID IN
(SELECT ProductId
FROM table
WHERE (qty = X AND price = X) OR (qty = X AND price = X) OR (qty = X AND price = X)
GROUP BY ProductID
HAVING COUNT(ProductID) = 3)

GROUP BY productID
ORDER BY productID, qty

Это дало мне необходимую фильтрацию.Спасибо за то, что начали меня!

1 голос
/ 06 апреля 2011

Это запрос для SQL Server, возможно, есть несколько настроек для MySql, но это основы.

SELECT * FROM <TABLE> WHERE ProductId in
(SELECT ProductId
FROM <TABLE>
GROUP BY ProductId
HAVING COUNT(ProductId) = 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...