查询以基于列的值范围生成2个值

时间:2019-03-15 16:11:06

标签: mysql sql

我很多年前学习过SQL,但是现在我的知识非常生锈。我不会发布任何代码,因为我的尝试还没有结束。我正在使用MySQL。

如果有一个包含产品的表

product_id price
1           50
2           70
3           100
4           120
5           900
6           1100

我想在网页上生成这样的链接

less than $70           //so that it narrows the result to ABOUT 30%
between $70 and $120    //so that it narrows the result to ABOUT 30%
more than $120          //so that it narrows the result to ABOUT 30%

我认为我需要一个返回最小值和中等值的查询

使用示例表,如果查询返回最小值(70),则该值以下的产品将占30%。一个中等价值的产品,其中30%将介于最小值(70)和中等价值(120)之间。另外,有30%的产品会高于中值(120)。

这是我的主意。我不需要工作代码。我只想要一些示例查询来帮助我“开始”。

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式解决此问题

  • 选择价格中等的产品和
  • 找到 MIN MAX 价格

使用:

Select MIN(middleProducts.price) AS price30Percent, MAX(middleProducts.price) AS price70Percent
from
(
    SELECT products.*, @counter := @counter +1 AS counter
    FROM (select @counter:=0) initvar, products
    ORDER BY price
) middleProducts
where (30/100 * @counter) < counter AND counter <= (70/100 * @counter)
ORDER BY price

使用 price30Percent price70Percent 生成链接。

参考

答案 1 :(得分:-1)

您可以在查询中使用“ case”开始,它看起来应如下所示:

select `product_id`, `price`, case when price < 70 then 'less than $70'
                                when price between 70 and 120 then 'between $70 and $120'
                                when price >120 then 'more than $120' end as `Price category`
from `table`;

这样,您将获得一组显示每种产品价格类别的数据,然后可以按照需要的方式进行排列。