获取负数最大的行,如果没有负数则获取最小数的行
Get row with largest negative number, or row with smallest number if there are no negative numbers
我正在尝试编写执行以下操作的 Snowflake SQL 语句:
- 如果column_A中有负数,returncolumn_A中负数最大的行
- 如果column_A中没有负数,returncolumn_A
中数字最小的行
例如,如果我的 table 是:
column_A
column_B
-20
1
-5
2
1
3
15
4
结果应该是:
-5, 2
如果我的table是:
column_A
column_B
1
3
15
4
20
5
结果应该是:1, 3
创建示例table:
with example_table as (
select
::NUMBER as column_A
, ::NUMBER as column_B
from
(values
(-20, 1)
, (-5, 2)
, (1, 3)
, (15, 4)
)
)
select * from example_table
类似于:
order by
case when column_a < 0 then 1 else 2 end,
abs(column_a)
offset 0 rows
fetch first 1 row only
基本上你 order by
在两个假列上:
- 对于所有负值,第一个将包含 1,否则将包含 2,因此这会将所有负值放在第一位,如果有的话
- 第二个将包含绝对值(例如 -5 变成 5 而 5 仍然是 5)
在SQL中,我会写:
SELECT (
IFF (
(SELECT COUNT(*) FROM myTable WHERE column_A < 0) > 0,
SELECT * FROM myTable WHERE column_A = MAX(column_A),
SELECT * FROM myTable WHERE column_A = MIN(column_A)
) );
这是 IFF 的文档:https://docs.snowflake.com/en/sql-reference/functions/iff.html
可以使用SIGN
和ABS
来实现:
SELECT *
FROM example_table
ORDER BY SIGN(COLUMN_A), ABS(COLUMN_A) LIMIT 1;
符号returns -1 表示负数,0 表示零,1 表示正数。 ABS returns 升序排列的绝对值。 LIMIT 1 将结果集限制为单行。
输出:
我正在尝试编写执行以下操作的 Snowflake SQL 语句:
- 如果column_A中有负数,returncolumn_A中负数最大的行
- 如果column_A中没有负数,returncolumn_A 中数字最小的行
例如,如果我的 table 是:
column_A | column_B |
---|---|
-20 | 1 |
-5 | 2 |
1 | 3 |
15 | 4 |
结果应该是: -5, 2
如果我的table是:
column_A | column_B |
---|---|
1 | 3 |
15 | 4 |
20 | 5 |
结果应该是:1, 3
创建示例table:
with example_table as (
select
::NUMBER as column_A
, ::NUMBER as column_B
from
(values
(-20, 1)
, (-5, 2)
, (1, 3)
, (15, 4)
)
)
select * from example_table
类似于:
order by
case when column_a < 0 then 1 else 2 end,
abs(column_a)
offset 0 rows
fetch first 1 row only
基本上你 order by
在两个假列上:
- 对于所有负值,第一个将包含 1,否则将包含 2,因此这会将所有负值放在第一位,如果有的话
- 第二个将包含绝对值(例如 -5 变成 5 而 5 仍然是 5)
在SQL中,我会写:
SELECT (
IFF (
(SELECT COUNT(*) FROM myTable WHERE column_A < 0) > 0,
SELECT * FROM myTable WHERE column_A = MAX(column_A),
SELECT * FROM myTable WHERE column_A = MIN(column_A)
) );
这是 IFF 的文档:https://docs.snowflake.com/en/sql-reference/functions/iff.html
可以使用SIGN
和ABS
来实现:
SELECT *
FROM example_table
ORDER BY SIGN(COLUMN_A), ABS(COLUMN_A) LIMIT 1;
符号returns -1 表示负数,0 表示零,1 表示正数。 ABS returns 升序排列的绝对值。 LIMIT 1 将结果集限制为单行。
输出: