我有一张桌子,有三列:Price1、Price2和Price3.对于每个价格列,还有一个专用的金额列Amount t1、Amount t2和Amount t3. 还有列ID和批次.

我想做的是找到最小值all the three Amount columns combined.

以下是我现在使用的SQL

Select
MIN(Q.Min_Size)  As Min_Min_Size 
From
    (Select
         Min("Archive"."Amount1") As Min_Size
     From
         "Archive"
     Where
         "Archive"."ID" = '123' And
         "Archive"."Price1" = 7.4 And
         "Archive"."Batch" > 2986 And
         "Archive"."Batch" < 6243) Q
Union 
Select
    Q.Min_Size
From
    (Select
         Min("Archive"."Amount2") As Min_Size
     From
         "Archive"
     Where
         "Archive"."ID" = '123' And
         "Archive"."Price2" = 7.4 And
         "Archive"."Batch" > 2986 And
         "Archive"."Batch" < 6243) Q
Group By
    Q.Min_Size
Union 
Select
    Q.Min_Size
From
    (Select
         Min("Archive"."Amount3") As Min_Size
     From
         "Archive"
     Where
         "Archive"."ID" = '123' And
         "Archive"."Price3" = 7.4 And
         "Archive"."Batch" > 2986 And
         "Archive"."Batch" < 6243) Q
Group By
    Q.Min_Size

在这个语句中,我有三行,第一行最小的列是"Amount t1",第二行的最小行是"Amount t2",第三行的最小行是"Amount t3".相反,我想要达到的是one line only with the minimum of the three

EDIT

我发现这个新说法很管用,但我想知道是否还有更好的说法.

Select
    Min(Least("Archive"."Amount1", "Archive"."Amount2", "Archive"."Amount3")) As MinAmount
From
    "Archive"
Where
    ("Archive"."ID" = '123' And
        "Archive"."Price1" = 7.4 And
        "Archive"."Batch" > 2986 And
        "Archive"."Batch" < 6243) Or
    ("Archive"."ID" = '123' And
        "Archive"."Batch" > 2986 And
        "Archive"."Batch" < 6243 And
        "Archive"."Price2" = 7.4) Or
    ("Archive"."ID" = '123' And
        "Archive"."Batch" > 2986 And
        "Archive"."Batch" < 6243 And
        "Archive"."Price3" = 7.4)

推荐答案

有一个least()的函数:demo

SELECT min(least("Archive"."Amount1", 
                 "Archive"."Amount2", 
                 "Archive"."Amount3")) AS "Min_Size"
FROM "Archive"
WHERE "Archive"."ID" = '123'
AND 7.4 IN("Archive"."Price1",
           "Archive"."Price2",
           "Archive"."Price3")
AND "Archive"."Batch" > 2986
AND "Archive"."Batch" < 6243;

Sql相关问答推荐

如何返回字符串中包含相同值的数据?

解析键-值对,根据值 Select ,并使用SQL创建新列

如何根据计数和分组获取订单总数

OVER子句WITH PARTITION BY和ORDER BY忽略主查询的WHERE子句

如何从Spark SQL的JSON列中提取动态数量的键值对

如何从查询中的三个或更多个表中添加另一个相同的列?

缺少日期标识

根据时间、状态和相关行在PostgreSQL中的存在来删除行

在Athena中使用regexp提取括号前的字符串值

改进的SQL子字符串提取

使用特定的Order By子句随机化SQL输出

SQL OR子句如何在JOINON查询中工作?

如何根据创建日期查找两个表中最接近的记录?

列(值不为空)到其他有序列

查询中获取审批者不起作用

REGEXP_SUBSTR使用方法

Teradata 多个进程的最大进程结束时间捕获

Set vs let vs 在snowflake中声明变量

删除具有相同 ID 的重复记录 - Postgresql

如何优化sql请求?