开发者社区 问答 正文

SQL:每个条件仅一行(第一行)的嵌套查询

我在进行简单查询时遇到困难。

这是我的:

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)

任何帮助将不胜感激。

展开
收起
心有灵_夕 2019-12-22 14:31:54 522 分享 版权
阿里云 AI 助理回答

你的查询已经很接近了,只需要再添加一个层次来确保在成本相同时选择功率最低的记录。你可以通过在子查询中同时考虑成本和功率来实现这一点,首先按成本排序,然后按功率排序。这里是一个修改后的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. 子查询首先按DIAPALE分组。 2. 在每个分组内,它找到最小的COST(这是你已经在做的)。 3. 同时,对于这些最小的COST,它还选择了相应的最小POWER值。这样,当成本相同时,会自动选择功率最小的记录。 4. 外层查询则根据这个结果集选取所有匹配的行。

请注意,这个查询假设在每个(DIA, PALE)组合下,成本和功率的最小值是唯一的。如果有多个记录具有相同的最小成本和功率,这个查询将返回所有这些记录。如果需要进一步限定只返回一条记录,可能需要额外的逻辑来决定具体选择哪一条。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
SQL
问答地址: