MySQL:在同一行中的某些条件下选择值和最小值

Posted

技术标签:

【中文标题】MySQL:在同一行中的某些条件下选择值和最小值【英文标题】:MySQL: SELECT value and a minimum value on certain conditions in the same row 【发布时间】:2015-01-12 14:38:24 【问题描述】:

(mysql) 在“简单”方面,我需要添加一个最低价格列。 即 PA 和 DA 记录的每个唯一组合的最低价格。

原始数据示例

id | PA  |     DA     |  price |
---|-----|------------|--------|
1  | SW1 |    PO19    |   100  | 
1  | W6  |    E16     |   5    |
2  | SW1 |    PO19    |   90   |
2  | W6  |    E16     |   8    |
3  | TW6 |    SO14    |   2000 |
3  | W6  |    E16     |   9    |

示例输出

id | PA  |     DA     |  price | MIN price|
---|-----|------------|--------|--------- |
1  | SW1 |    PO19    |   100  |    90    |
1  | W6  |    E16     |   5    |    5     |
2  | SW1 |    PO19    |   90   |    90    |
2  | W6  |    E16     |   8    |    5     |
3  | TW6 |    SO14    |   2000 |    2000  |
3  | W6  |    E16     |   9    |    5     |

例如上图:对于 PA=SW1, DA=PO19,MIN price=90 (id=2)。

理想情况下,我也只想选择一个特定的 id,但它仍然返回“全局”最小值。 例如如果我想选择 id=2,它会返回:

id | PA  |     DA     |  price | MIN price|
---|-----|------------|--------|--------- |
2  | SW1 |    PO19    |   90   |    90    |
2  | W6  |    E16     |   8    |    5     |

我会发布一些我做过的尝试,但它们都是无用的尝试。

问候,

乔治

【问题讨论】:

第一件事:你的意思是添加一个列Min price 怎么样?您可以通过添加 coloumn 来直接执行此操作。或者您想使用查询来执行此操作。您想要选择 id=2 的第二件事,那么您的预期结果将无法实现,因为 id=2 存在 2 行。我建议您这样做主键,以便您可以拥有不同的 id 或选择条件匹配 PA 和 DA 的数据 【参考方案1】:

可以将最低价格的子选择加入到原表中得到你的结果。

SELECT p.id, p.pa, p.da, p.price, minp.price min_price
FROM prices p
JOIN (SELECT pa, da, min(price) price from prices group by pa, da) minp
ON minp.pa = p.pa and minp.da = p.da
WHERE p.id = 2

【讨论】:

谢谢,我曾尝试进行子选择连接,但我还没有完全正确。再次感谢。【参考方案2】:

您可以像这样使用子查询 在此处检查输出sqlFiddle

    select p.id,p.pa,p.da, 
(select min(s.price)
 from sample s 
group by s.pa,s.da 
having s.pa=p.pa and s.da=p.da)
 from sample p

注意格式

【讨论】:

以上是关于MySQL:在同一行中的某些条件下选择值和最小值的主要内容,如果未能解决你的问题,请参考以下文章

有这个 mysql 查询我希望使用多个条件总和。当我在同一行中使用 2 个 where 时,它​​显示一个错误

如果满足 for 循环中的条件,则在同一行中的其他单元格中获取值

快速回顾MySQL:汇总和分组

快速回顾MySQL:汇总和分组

如果它们与使用 vba 的条件匹配,则在列中查找最小值和中值

如何在文件处理中从文本文件中找到每一行的最小值和最大值?