Question

J'utilise VBScript (ASP classique) et SQL Server; Je suis en train d'avoir une section sur le site où vous pouvez voir un nombre de produits à certains niveaux de prix. Quelque chose comme:

$50 - $100 (4)
$100 - $500 (198)
$500 - $1000 (43)

Pour l'amour de moi, je ne peux pas trouver un bon moyen de faire une requête comme celui-ci. Je veux dire ... Je sais comment obtenir le nombre de produits à une certaine gamme de prix, mais je ne peux pas comprendre comment le faire à plusieurs gammes de prix différents sans avoir à écrire un bateau plein de requêtes imbriquées pour regrouper tous les résultats , d'autant plus que les fourchettes de prix peuvent varier considérablement selon les produits.

Y at-il une « règle » lorsque vous faites quelque chose comme cela à la façon dont vous figurez les différentes fourchettes de prix?

Était-ce utile?

La solution

La façon la plus efficace de le faire dans SQL (je crois) est d'utiliser une construction sum case:

select  sum(case when Price >= 50 and Price < 100 then 1 else 0 end) as 50to100,
        sum(case when Price >= 100 and Price < 500 then 1 else 0 end) as 100to500,
        sum(case when Price >= 500 and Price < 1000 then 1 else 0 end) as 500to1000
from    Products

Cela ne nécessite qu'un seul balayage de la table.

Autres conseils

Tableau lecteur il:

SELECT pr.MinPrice, pr.MaxPrice, COUNT(*)
FROM Products AS p
INNER JOIN PriceRanges AS pr
    ON p.UnitPrice BETWEEN pr.MinPrice AND pr.MaxPrice
GROUP BY pr.MinPrice, pr.MaxPrice
ORDER BY pr.MinPrice, pr.MaxPrice

Si vous avez besoin différentes fourchettes de prix pour différentes catégories de produits:

SELECT pr.ProductCategory, pr.MinPrice, pr.MaxPrice, COUNT(*)
FROM Products AS p
INNER JOIN PriceRanges AS pr
    ON p.ProductCategory = pr.ProductCategory
    AND p.UnitPrice BETWEEN pr.MinPrice AND pr.MaxPrice
GROUP BY pr.ProductCategory, pr.MinPrice, pr.MaxPrice
ORDER BY pr.ProductCategory, pr.MinPrice, pr.MaxPrice

Vous devrez ajouter un peu de nettoyage et de gérer la fin des plages.

Vous pouvez utiliser des requêtes syndicales

SELECT '100 - 200', COUNT(*) FROM Products
WHERE Price >= 100 AND Price <= 200
UNION
SELECT '300 - 400', COUNT(*) FROM Products
WHERE Price >= 300 AND Price <= 400

Créer une fonction (UDF) qui concerne la fourchette de prix d'une valeur

$50 - $100 = 1
$100 - $500 = 2
$500 - $1000 = 3

etc.

Ensuite, faites un groupement de sélection par la fonction sur la colonne de valeur.

Je serais probablement utiliser une fonction SQL qui a attribué chaque enregistrement avec un code de catégorie en fonction de la valeur, puis groupe par le code de la catégorie avec un compte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top