【问题标题】:MySQL Check if a value is within the range of values derived from a subqueryMySQL 检查一个值是否在从子查询派生的值范围内
【发布时间】:2018-03-28 23:34:24
【问题描述】:

我需要查询方面的帮助,我有一个表格,这是一个示例

Item Code   Qty   Price   Supplier
1234          1      20    A
1234          3      15    B
1234          6      2     C
4321          2      8     D
4321          7      1     A
4321          9      5     G
5432          8      10    E
5432          3      2     F
5467          5      9     H
5467          5      7     K

我有一个子查询,其中包含不同的商品代码、max(price) 和 max(price) 的 75%,这是结果。

Item Code   Max value   Min Value
1234         20          15
4321         8           6
5432        10           7.5
5467         9           6.75

如果价格在特定项目代码的第二个表的范围内,我只需要从第一个表中提取那些行。有人可以帮忙吗?

【问题讨论】:

  • edit你的问题告诉我们更多关于你的第二张桌子。
  • 编辑您的问题并显示您已有的查询。另外,显示第二个表的架构。
  • 第二个表是具有不同商品代码和最高价格的子查询。

标签: mysql subquery correlated-subquery


【解决方案1】:

你可以试试这个:

SELECT
    a.*
FROM items a
JOIN (
    SELECT 
        item_code,
        MAX(Price) as Max_Value,
        MAX(Price) * 0.75 as Min_Value
    FROM items
    GROUP BY item_code) b
ON a.item_code = b.item_code
WHERE a.price between b.Min_Value AND b.Max_Value
order by a.item_code, a.price ASC

【讨论】:

  • 这太棒了。
  • @SQLSurfer:如果这对你有用,请接受答案。
  • @SloanThrasher 结果只给了我第一个项目代码 1234 ,项目代码数量价格供应商 1234 1 20.00 A 1234 3 15.00 B
  • 不取其他满足给定条件的商品编码
【解决方案2】:

我将首先获取每个 itemCode 的最高价格,然后使用 itemCode 和 chwck 连接到主表,确保价格在每件商品最高价格和最高价格的 75% 之间。

Select tbl.*
From myTable tbl
Join (
Select item_code,
         max(price) as mx,
         Round(max(price)*.75,0) as mx75
From myTable
Group by item_code) tab
On tbl.item_code = tab.item_code
And tbl.price between tab.mx75 and tab.mx
Order by 1, 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多