À l'aide de requête SQL pour trouver les détails de clients qui ont commandé > x les types de produits

Veuillez noter que j'ai vu une requête similaire ici, mais pense que ma requête est assez différent pour le mérite d'une question distincte.

Supposons qu'il existe une base de données avec les tables suivantes:

  1. customer_table avec customer_ID (champ clé), customer_name
  2. orders_table avec order_ID (champ clé), customer_ID, product_ID

Supposons maintenant je voudrais trouver les noms de tous les clients qui ont commandé plus de 10 différents types de produit, et le nombre de types de produits qu'ils ont commandés. Plusieurs commandes d'un même produit ne compte pas.

Je pense que la requête ci-dessous devrait fonctionner, mais se poser les questions suivantes:

  1. Est l'utilisation de count(distinct xxx) généralement admis avec un "groupe" déclaration?
  2. Est la méthode que j'utilise de façon standard? Quelqu'un avez des meilleures idées (par exemple, sans la participation des tables temporaires)?

Ci-dessous est ma requête

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
InformationsquelleAutor Andy | 2011-09-06