SQL Сервер: поиск среди групп на основе нескольких условий - PullRequest
0 голосов
/ 28 марта 2020

У меня есть следующая таблица Product. Я пытаюсь найти продукты на основе нескольких критериев.

Вот мои образцы данных:

+-----------+------------+------------------+----------------+-----------------+-------+
| productid |  barcode   |   product_name   | is_product_new | premium_service | price |
+-----------+------------+------------------+----------------+-----------------+-------+
|         1 | 1122334455 | rubber duck      |              0 |               0 |  3,00 |
|         2 | 1122334455 | rubber duck      |              1 |               0 |  4,00 |
|         3 | 1122334455 | rubber duck      |              1 |               0 |  5,00 |
|         4 | 1122334455 | rubber duck      |              1 |               1 |  6,00 |
|         5 | 2233445566 | barbie doll      |              1 |               0 | 10,00 |
|         6 | 2233445566 | barbie doll      |              0 |               0 |  8,00 |
|         7 | 3344556677 | actionman figure |              1 |               1 | 22,00 |
|         8 | 3344556677 | actionman figure |              1 |               0 | 18,00 |  
|         9 | 3344556677 | actionman figure |              0 |               0 |  6,00 |
|        10 | 3344556677 | actionman figure |              0 |               0 |  5,00 |
+-----------+------------+------------------+----------------+-----------------+-------+

Всего существует три продукта.

Я хочу найти продукты с самой низкой новой ценой, самой низкой использованной ценой и премиальной ценой среди предлагаемых продуктов премиум-класса.

Мой ожидаемый результат:

+-----------+------------+------------------+------------------+------------------+-----------------+
| productid |  barcode   |   product_name   | lowest_old_price | lowest_new price |   premium_price |
+-----------+------------+------------------+------------------+------------------+-----------------+
|         1 | 1122334455 | rubber duck      |             3.00 |             4.00 |            6.00 |
|         7 | 3344556677 | actionman figure |             5.00 |            18.00 |           22.00 |
+-----------+------------+------------------+------------------+------------------+-----------------+

Я пытался написать запрос с помощью группы и предложения, но мои результаты не имели никакого смысла! Даже я не уверен, какие функции / предложения мне нужно использовать!

Нужна ваша помощь ...

1 Ответ

2 голосов
/ 28 марта 2020

Хммм. , , если я правильно понимаю, это условное агрегирование с предложением having:

select min(productid) as productid, barcode, product_name
       min(case when is_product_new = 0 then price end) as old_price,
       min(case when is_product_new = 1 then price end) as new_price,
       min(case when premium_service = 1 then price end) as premium_price
from products p
group by productid, barcode, product_name
having max(premium_service) = 1;

Если premium_service - бит, вы можете преобразовать в целое число:

having max(convert(int, premium_service)) = 1
...