Как создать запрос типа «фильтр по цене»? - PullRequest
3 голосов
/ 27 января 2009

Я использую VBScript (ASP Classic) и SQL Server; Я пытаюсь создать раздел на сайте, где вы можете увидеть количество продуктов с определенными ценовыми уровнями. Что-то вроде:

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

Ради любви ко мне, я не могу найти хороший способ сделать такой запрос. Я имею в виду ... Я знаю, как получить количество продуктов в определенном ценовом диапазоне, но я не могу понять, как сделать это в нескольких разных ценовых диапазонах, не имея необходимости писать множество вложенных запросов для агрегирования всех результатов Тем более что ценовые диапазоны могут значительно отличаться среди сопутствующих товаров.

Существует ли "практическое правило", когда вы делаете что-то подобное в отношении того, как вы вычисляете различные ценовые диапазоны?

Ответы [ 5 ]

1 голос
/ 27 января 2009

Наиболее эффективный способ сделать это в 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

Для этого потребуется только одно сканирование таблицы.

1 голос
/ 27 января 2009

Таблица привода это:

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

Вы должны будете добавить некоторую очистку и обработать конец диапазонов.

0 голосов
/ 27 января 2009

Создать функцию (UDF), которая связывает диапазон цен со значением

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

и т.д.

Затем выполните группировку выбора по функции в столбце значений.

0 голосов
/ 27 января 2009

Я бы, вероятно, использовал функцию SQL, которая присваивала каждой записи код категории на основе значения, а затем группировала по коду категории с количеством.

0 голосов
/ 27 января 2009

Вы можете использовать объединенные запросы

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
...