Oracle SQL select에서 최대 2개의 숫자를 계산하는 방법은 무엇입니까?
이것은 단순해야 하며 SQL에 대한 저의 무지를 보여줍니다.
SQL> select max(1,2) from dual;
select max(1,2) from dual
*
ERROR at line 1:
ORA-00909: invalid number of arguments
보통 집계에 max가 사용되는 것을 알고 있습니다.여기서 무엇을 사용할 수 있나요?
결국 이런 걸 쓰고 싶어요.
select total/max(1,number_of_items) from xxx;
여기서 number_of_module은 정수이며 0을 지정할 수 있습니다.이 경우에도 합계를 보고 싶습니다.
Oracle을 사용하고 있는 것 같아서greatest
대신 이것을 위해 기능하다max
select total/greatest(1,number_of_items)
from xxx;
Oracle 10.2부터는 사용자가 원하는 기능을 수행하는 GREATE 기능이 도입되었습니다.LEST 기능도 있습니다.
예:
select greatest(1,2) from dual;
GREATEST(1,2) ------------- 2
select greatest(8,6,4,2) from dual;
GREATEST(8,6,4,2) ----------------- 8
select greatest(-1,-2) from dual;
GREATEST(-1,-2) --------------- -1
select greatest('A','B','CCC','D') from dual;
GREATEST('A','B','CCC','D') --------------- D
CASE 스테이트먼트를 사용할 수 있습니다.
SELECT Total = CASE WHEN number_of_items > 0
THEN total/number_of_items
ELSE total END
FROM xxx
SELECT total/(CASE WHEN number_of_items>1 THEN number_of_items ELSE 1 END) FROM xxx
여기서 작업해야 합니다.
이를 위해 새 함수를 만들어야 합니다.
CREATE FUNCTION InlineMax
(
@p1 sql_variant,
@p2 sql_variant
) RETURNS sql_variant
AS
BEGIN
RETURN
CASE
WHEN @p1 IS NULL AND @p2 IS NOT NULL THEN @p2
WHEN @p2 IS NULL AND @p1 IS NOT NULL THEN @p1
WHEN @p1 > @p2 THEN @p1
ELSE @p2 END
END;
자세한 내용은 이 스레드를 확인하십시오.SQL Server에는 Math와 같은 두 가지 값을 취하는 Max 함수가 있나요?최대 입력.인터넷?
일반적으로 다음과 같습니다.
SELECT MAX(columnName)
FROM Table1
또는
SELECT MAX(columnName)
FROM (SELECT * FROM TableX) AS T1
또는 (고객의 경우 이것이 원하는 것일 수 있습니다)
SELECT MAX(value)
FROM (SELECT 1 AS VALUE FROM DUAL UNION SELECT 2 AS VALUE FROM DUAL)
하지만 좀 더 깔끔한 방법이 있을 수도 있어요.
업데이트: 표 XXX의 number_of_items와 합계의 예를 사용하면 다음과 같습니다.
SELECT TOTAL/MAX(NUMBER_OF_ITEMS)
FROM XXX
업데이트 2: 항목 수를 0으로 설정하면 0으로 나눗셈하는 예외가 발생한다는 점에 유의하십시오.따라서 다른 답변에서는 사용자가 케이스를 입력하고 다른 답변에서는 TOTAL을 입력했습니다.이렇게 하면 예외가 발생하지 않습니다.
이는 Oracle 8.0 이전 버전(예: 이전 버전)에서 가능합니다.CASE
다음과 같은 수학적 트릭을 사용하여 도입되었습니다.
SELECT DECODE(NUMBER_OF_ITEMS-1+ABS(NUMBER_OF_ITEMS-1), 0, 1, NUMBER_OF_ITEMS) AS TOTAL
FROM xxx
...에 상당합니다.max(1,number_of_items)
.
3개를 교환해 주세요.1
필요에 따라 다른 값을 지정합니다.
이것은, 다음과 같은 이유로 동작합니다.number_of_items - 1
number_of_module이 1보다 작을 경우 0 또는 음수가 됩니다.그리고 일반적으로는x + abs(x)
x <= 0일 때는 항상 0이므로 첫 번째 값은 0입니다.decode
옵션이 일치합니다.
일부 (서드파티)고객이 Oracle 8.0을 아직 사용하고 있을 수 있으며, 최종고객이 최종적으로 업그레이드 할 것인지 또는 언제 업그레이드 할 것인지를 확인하는 데 많은 시간이 걸릴 수 있기 때문에 이 기능이 필요합니다.
먼저 함수를 만듭니다.
CREATE OR REPLACE FUNCTION max_finder(n1 in number, n2 in number)
return number
AS
n3_max number;
BEGIN
IF n1<=n2 THEN
n3_max:=n2;
ELSE
n3_max:=n1;
END IF;
return n3_max;
END;
/
그럼 실행하세요
DECLARE
n3_max number;
BEGIN
n3_max:=max_finder(5,13);
dbms_output.put_line(n3_max);
END;
/
언급URL : https://stackoverflow.com/questions/3521124/how-to-calculate-the-maximum-of-two-numbers-in-oracle-sql-select
'source' 카테고리의 다른 글
브라우저의 옵션 상태 파라미터를 UI 라우터로 되돌리는 방법 (0) | 2023.02.25 |
---|---|
API로서 Google Reader를 어디서 시작할까요? (0) | 2023.02.25 |
wp_siteurl과 wp_home의 차이 (0) | 2023.02.25 |
Is there a way to check if the react component is unmounted? (0) | 2023.02.22 |
모델 변경 시 AngularJS 뷰가 업데이트되지 않음 (0) | 2023.02.22 |