我在进行简单查询时遇到困难。
这是我的:
DIA PALE POWER COST
8 7 82 335
8 7 85 335 <--
8 7 96 335 <--
8 8 120 345
9 7 110 324
这是我的目标:选择每个DIA和PALE具有最低成本的值。但当成本相同时,仅返回最低的功率。
DIA PALE POWER COST
8 7 82 335
8 8 120 345
9 7 110 324
我已经开始查询,但是我缺少执行FIRST(MIN(POWER))之类的部分
Select *
From Table1 T1
WHERE [cost] = (Select min([cost])
From Table1
Where dia = T1.dia AND pale = T1.pale)
任何帮助将不胜感激。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你的查询已经很接近了,只需要再添加一个层次来确保在成本相同时选择功率最低的记录。你可以通过在子查询中同时考虑成本和功率来实现这一点,首先按成本排序,然后按功率排序。这里是一个修改后的SQL查询示例:
SELECT *
FROM Table1 T1
WHERE (DIA, PALE, COST, POWER) IN (
SELECT DIA, PALE, MIN(COST), MIN(POWER)
FROM Table1
GROUP BY DIA, PALE
HAVING MIN(COST) = COST
)
ORDER BY DIA, PALE, COST, POWER;
这个查询的工作原理如下: 1. 子查询首先按DIA
和PALE
分组。 2. 在每个分组内,它找到最小的COST
(这是你已经在做的)。 3. 同时,对于这些最小的COST
,它还选择了相应的最小POWER
值。这样,当成本相同时,会自动选择功率最小的记录。 4. 外层查询则根据这个结果集选取所有匹配的行。
请注意,这个查询假设在每个(DIA, PALE)
组合下,成本和功率的最小值是唯一的。如果有多个记录具有相同的最小成本和功率,这个查询将返回所有这些记录。如果需要进一步限定只返回一条记录,可能需要额外的逻辑来决定具体选择哪一条。