Faire une requête SQL pour la fonction moyenne

J'essaie d'écrire une requête SQL pour répertorier les fournisseurs qui ont plus de factures que le nombre moyen de factures par fournisseur. Jusqu'à présent, je suis venu avec deux requêtes mais je ne suis pas sûr que l'un soit vrai ou non. Si quelqu'un peut m'aider s'il vous plaît.

SELECT VENDOR_ID,COUNT(INVOICE_ID), ROUND(AVG(INVOICE_ID), 2) FROM INVOICES GROUP BY VENDOR_ID HAVING COUNT(INVOICE_ID) > AVG(INVOICE_ID) ORDER BY AVG(INVOICE_ID); SELECT VENDOR_ID,COUNT(INVOICE_ID), ROUND(AVG(INVOICE_ID), 2) FROM INVOICES GROUP BY VENDOR_ID HAVING AVG(INVOICE_ID) > (SELECT AVG(INVOICE_ID) FROM INVOICES) ORDER BY AVG(INVOICE_ID); 

** Édité selon le commentaire d'Arth

Ainsi, le nombre moyen de factures par fournisseur serait:

 SELECT cast(COUNT(Invoice_ID) as float) / COUNT(DISTINCT Vendor_Id) FROM INVOICES 

Maintenant, mettons cela dans vos exigences

 SELECT Vendor_Id, COUNT(Invoice_Id) FROM INVOICES GROUP BY Vendor_Id HAVING COUNT(Invoice_ID) > (SELECT cast(COUNT(Invoice_ID) as float) / COUNT(DISTINCT Vendor_Id) FROM INVOICES) 

Je suppose que c'est une question MySQL pas SQL-Server .. ce sont deux moteurs de database distincts. Veuillez choisir l'label appropriée.

Tout d'abord, il semble que vous voulez faire la moyenne du nombre de factures, pas l'identifiant de la facture. Pour get le nombre moyen de factures:

  SELECT AVG(c.invoice_count) FROM ( SELECT COUNT(*) invoice_count FROM invoices i GROUP BY i.vendor_id ) c 

Je voudrais probablement JOIN pour utiliser comme condition:

  SELECT vendor_id, COUNT(*) invoice_count FROM invoices JOIN ( SELECT AVG(c.invoice_count) avg_invoice_count FROM ( SELECT COUNT(*) invoice_count FROM invoices GROUP BY vendor_id ) c ) a GROUP BY vendor_id HAVING invoice_count > a.avg_invoice_count ORDER BY invoice_count DESC 

Comme indiqué par Steve Ford, vous pouvez calculer l'AVG comme suit:

  SELECT vendor_id, COUNT(*) invoice_count FROM invoices JOIN ( SELECT CAST(COUNT(*) AS FLOAT)/COUNT(DISTINCT vendor_id) avg_invoice_count FROM invoices ) a GROUP BY vendor_id HAVING invoice_count > a.avg_invoice_count ORDER BY invoice_count DESC