如何创建“按价格筛选”类型的查询?

时间:2009-01-27 16:16:29

标签: sql filtered-lookup

我正在使用VBScript(ASP Classic)和SQL Server;我正试图在网站上有一个部分,你可以看到一定价格水平的产品数量。类似的东西:

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

为了爱我,我无法想出一个像这样的查询的好方法。我的意思是......我知道如何在一定的价格范围内获得产品数量,但我无法弄清楚如何在几个不同的价格范围内完成它而无需编写大量嵌套查询来汇总所有结果特别是因为相关产品的价格范围会有很大差异。

在做这样的事情时,是否存在“经验法则”,以了解如何计算不同的价格范围?

5 个答案:

答案 0 :(得分:1)

表驱动它:

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

如果您需要针对不同产品类别的不同价格范围:

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

您必须添加一些清理并处理范围的结束。

答案 1 :(得分:1)

在SQL中执行此操作的最有效方法(我相信)是使用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

这只需要对表格进行一次扫描。

答案 2 :(得分:0)

您可以使用联合查询

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

答案 3 :(得分:0)

创建一个将价格范围与值

相关联的函数(UDF)
$50 - $100 = 1
$100 - $500 = 2
$500 - $1000 = 3

然后通过值列上的函数进行选择分组。

答案 4 :(得分:0)

我可能会使用一个SQL函数,它根据值为每个记录分配一个类别代码,然后按类别代码进行分组。

相关问题