【问题标题】:A query to generate 2 values based on the range of values of a column根据列的值范围生成 2 个值的查询
【发布时间】:2019-03-15 16:11:06
【问题描述】:

我多年前学习过 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)。

这大概是我的想法。我不想要一个工作代码。我只想要一些示例查询来帮助我“开始”。

【问题讨论】:

  • 您正在寻找什么结果(作为表 - 因为 SQL 返回表)?你的服务器版本是多少?

标签: mysql sql


【解决方案1】:

你可以解决这个问题

  • 选择“中等”价位的产品并
  • 查找 MINMAX 价格

用途:

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)

使用 price30Percentprice70Percent 生成链接。

参考文献

【讨论】:

    【解决方案2】:

    您可以从在查询中使用“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`;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      相关资源
      最近更新 更多