选择一个功能的MIN,并创建一个虚拟表
问题描述:
我需要把一个函数的最小值,如果最小值他穿上0 virtal列,如果没有,将1选择一个功能的MIN,并创建一个虚拟表
SELECT ID, Name, (X + Y) AS TOTAL, MIN(TOTAL) AS MINVALUE FROM TABLE
例
ID Name TOTAL MINVALUE
1 item 22 0
1 item 33 1
1 item 50 1
2 item2 200 1
2 item2 30 0
答
你做到这一点使用窗口功能和case
:
select id, name, (x + y) as total,
(case when (x + y) = min(x + y) over (partition by id)
then 0 else 1
end) as IsNotMinValue
from t;
我通常遵循Unix约定Ø f“0”为假,“1”(实际不为“0”)为真。因此,我将国旗命名为IsNotMinValue
,因为这是我将如何解释它。
你需要一个子选择。 min()是一个聚合函数,并且只能在整个结果集可用时才能工作,但是您以每行为基础使用它,因此每行都会自动同时使用它自己的最大/最小值。 '选择min(总数)from(选择x + y作为总数...)作为foo' –