Обратите внимание, что я видел похожий запрос здесь , но думаю, что мой запрос достаточно отличается, чтобы получить отдельный вопрос.
Предположим, что есть база данных со следующими таблицами:
- customer_table с customer_ID (ключевое поле), customer_name
- orders_table с order_ID (ключевое поле), customer_ID, product_ID
Теперь предположим, что я хотел бы найти имена всех клиентов, которые заказали более 10 различных типов продуктов, и количество типов продуктов, которые они заказали. Несколько заказов на один и тот же товар не учитываются.
Я думаю, что приведенный ниже запрос должен работать, но есть следующие вопросы:
- Можно ли вообще использовать count (отличный от xxx) с оператором group by?
- Является ли метод, который я использую стандартным способом? У кого-нибудь есть идеи получше (например, без использования временных таблиц)?
Ниже мой запрос
select T1.customer_name, T1.customer_ID, T2.number_of_products_ordered
from customer_table T1
inner join
(
select cust.customer_ID as customer_identity, count(distinct ord.product_ID) as number_of_products_ordered
from customer_table cust
inner join order_table ord on cust.customer_ID=ord.customer_ID
group by ord.customer_ID, ord.product_ID
having count(distinct ord.product_ID) > 10
) T2
on T1.customer_ID=T2.customer_identity
order by T2.number_of_products_ordered, T1.customer_name