2 votes

Instructions SQL pour trouver un pourcentage sur plusieurs valeurs

J'ai trois tables qui contiennent des éléments comme :

Products:
  ID   NAME     CATEGORY   STOCK
   1   Bolts      3          1
   2   Daisies    4          1
   3   Milk       5          2
   4   Washers    3          3
   5   Roses      4          1

Categories:
  ID  DESCRIPTION
   3  Hardware
   4  Plants
   5  Food

Stocks:
  ID DESCRIPTION
   1 In Stock
   2 Out of Stock
   3 Ordered

Je me suis frappé la tête pour obtenir une instruction SQL qui renvoie un pourcentage de mes articles en stock en fonction de leur catégorie, mais je n'arrive pas à la faire fonctionner.

Je cherche une déclaration qui renvoie quelque chose comme :

CATEGORY    PERCENTAGE   // comments
Hardware      50         // Bolts in stock but washers are ordered
Plants       100         // all plants in stock
Food           0         // milk is out of stock

Des idées...

2voto

Bohemian Points 134107
select DESCRIPTION, sum(STOCK = 1) / count(*) as PERCENTAGE
from Products p
join Categories c on c.id = p.CATEGORY
group by DESCRIPTION

Cela fonctionne parce que STOCK = 1 est un booléen, ce qui est 1 si elle est vraie et 0 si elle est fausse, alors SUM(STOCK = 1) compte combien de fois STOCK = 1 est vrai !

0voto

marc Points 4070

Je ne vois pas vraiment l'utilité de cette déclaration, mais ce serait

SELECT c.DESCRIPTION, count(p.STOCK = 1) / count(*) * 100
FROM CATEGORY c
JOIN PRODUCT p ON p.CATEGORY = c.ID
GROUP BY c.ID, c.DESCRIPTION

Il faut le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X