programing

SQL에서 최소 두 개의 값 가져오기

iphone6s 2023. 4. 12. 21:53
반응형

SQL에서 최소 두 개의 값 가져오기

에는 두 는 변수입니다.PaidThisMonth 다른 는 '하다'라고 OwedPast 다SQL의 중하여 " " "로 반환"이라는 제목의 합니까?PaidForPast

MIN이치노

SQL Server 2012 및 2014는 IIF(cont, true, false) 기능을 지원합니다.따라서 최소한의 선택을 위해 다음과 같이 사용할 수 있습니다.

SELECT IIF(first>second, second, first) the_minimal FROM table

IIF는 글쓰기의 줄임말일 뿐이지만CASE...WHEN...ELSE기기편편편편다다

CASE, IIF 및 UDF를 사용하는 솔루션은 적절하지만 3개 이상의 비교값을 사용하여 문제를 일반적인 케이스로 확장하는 경우에는 실용적이지 않습니다.SQL Server 2008+의 범용 솔루션에서는 다음과 같은 VALUES 절의 이상한 응용 프로그램이 사용됩니다.

SELECT
PaidForPast=(SELECT MIN(x) FROM (VALUES (PaidThisMonth),(OwedPast)) AS value(x))

이 웹 사이트 http://sqlblog.com/blogs/jamie_thomson/archive/2012/01/20/use-values-clause-to-get-the-maximum-value-from-some-columns-sql-server-t-sql.aspx에 대한 크레딧.

사용 사례:

   Select Case When @PaidThisMonth < @OwedPast 
               Then @PaidThisMonth Else @OwedPast End PaidForPast

인라인 테이블 값 UDF로서

CREATE FUNCTION Minimum
(@Param1 Integer, @Param2 Integer)
Returns Table As
Return(Select Case When @Param1 < @Param2 
                   Then @Param1 Else @Param2 End MinValue)

사용방법:

Select MinValue as PaidforPast 
From dbo.Minimum(@PaidThisMonth, @OwedPast)

ADDENDUM: 이것은 가능한 두 가지 값만 다루는 경우에 가장 적합합니다.만약 두 개 이상일 경우, Craig의 Values 절을 사용한 답변을 고려하십시오.

SQL Server 2022+(「MySQL Postgre」)9.3+」.LEAST ★★★★★★★★★★★★★★★★★」GREATEST★★★★★★★★★★★★★★★★★★.

SELECT GREATEST(A.date0, B.date0) AS date0, 
       LEAST(A.date1, B.date1, B.date2) AS date1
FROM A, B
WHERE B.x = A.x

포함:

  • GREATEST(value [, ...]): 지정된 값에서 가장 큰(최대값) 인수를 반환합니다.
  • LEAST(value [, ...])지정된 값에서 가장 작은(최소값) 인수를 반환합니다.

문서 링크:

업데이트 중에 최대 4개의 복합 선택 항목을 찾아야 하는 상황이 있었습니다.이 방법이라면 원하는 만큼 가질 수 있습니다!

숫자를 추가 선택으로 바꿀 수도 있습니다.

select max(x)
 from (
 select 1 as 'x' union
 select 4 as 'x' union
 select 3 as 'x' union
 select 2 as 'x' 
 ) a

보다 복잡한 사용법

 @answer = select Max(x)
           from (
                select @NumberA as 'x' union
                select @NumberB as 'x' union
                select @NumberC as 'x' union
                select (
                       Select Max(score) from TopScores
                       ) as 'x' 
     ) a

나는 UDF가 더 나은 성능을 가지고 있다고 확신한다.

최대값(필드, 0)을 계산하려면 다음과 같은 트릭을 사용합니다.

SELECT (ABS(field) + field)/2 FROM Table

합니다.fieldnegative 입니다그렇지 반환됩니다.field.

CASE 문을 사용합니다.

는 여러분이 하는.
http://msdn.microsoft.com/en-us/library/ms181765.aspx

페이지의 코드는 다음과 같습니다.

USE AdventureWorks;
GO
SELECT   ProductNumber, Name, 'Price Range' = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO

이 방법은 최대 5일 동안 작동하며 Null을 처리합니다.인라인 함수로 사용할 수 없었습니다.

CREATE FUNCTION dbo.MinDate(@Date1 datetime = Null,
                            @Date2 datetime = Null,
                            @Date3 datetime = Null,
                            @Date4 datetime = Null,
                            @Date5 datetime = Null)
RETURNS Datetime AS
BEGIN
--USAGE select dbo.MinDate('20120405',null,null,'20110305',null)
DECLARE @Output datetime;

WITH Datelist_CTE(DT)
AS (
        SELECT @Date1 AS DT WHERE @Date1 is not NULL UNION
        SELECT @Date2 AS DT WHERE @Date2 is not NULL UNION
        SELECT @Date3 AS DT WHERE @Date3 is not NULL UNION
        SELECT @Date4 AS DT WHERE @Date4 is not NULL UNION
        SELECT @Date5 AS DT WHERE @Date5 is not NULL
   )
Select @Output=Min(DT) FROM Datelist_CTE;

RETURN @Output;
END;

수학과 스코티크의 훌륭한 논리/코드를 바탕으로 다음과 같이 제출합니다.

DECLARE @a INT, @b INT, @c INT = 0;

WHILE @c < 100
    BEGIN
        SET @c += 1;
        SET @a = ROUND(RAND()*100,0)-50;
        SET @b = ROUND(RAND()*100,0)-50;
        SELECT @a AS a, @b AS b,
            @a - ( ABS(@a-@b) + (@a-@b) ) / 2 AS MINab,
            @a + ( ABS(@b-@a) + (@b-@a) ) / 2 AS MAXab,
            CASE WHEN (@a <= @b AND @a = @a - ( ABS(@a-@b) + (@a-@b) ) / 2)
            OR (@a >= @b AND @a = @a + ( ABS(@b-@a) + (@b-@a) ) / 2)
            THEN 'Success' ELSE 'Failure' END AS Status;
    END;

Scottyc의 MIN 함수에서 MAX 함수로의 도약은 분명해야 했지만, 그렇지 않았기 때문에 그것을 해결하고 여기에 포함시켰습니다: SELECT @a + (@b-@a) + (@b-@a) / 2. 랜덤으로 생성된 숫자는 증명은 아니지만 적어도 두 가지 공식 모두 맞다는 것을 회의적으로 납득시켜야 합니다.

임시 테이블을 사용하여 값의 범위를 삽입한 다음 저장 프로시저 또는 UDF 내에서 임시 테이블의 최소/최대 값을 선택합니다.이것은 기본 구조이므로, 필요에 따라서 자유롭게 수정해 주세요.

예를 들어 다음과 같습니다.

CREATE PROCEDURE GetMinSpeed() AS
BEGIN

    CREATE TABLE #speed (Driver NVARCHAR(10), SPEED INT);
    '
    ' Insert any number of data you need to sort and pull from
    '
    INSERT INTO #speed (N'Petty', 165)
    INSERT INTO #speed (N'Earnhardt', 172)
    INSERT INTO #speed (N'Patrick', 174)

    SELECT MIN(SPEED) FROM #speed

    DROP TABLE #speed

END
Select MIN(T.V) FROM (Select 1 as V UNION Select 2 as V) T
SELECT (WHEN first > second THEN second ELSE first END) the_minimal FROM table

언급URL : https://stackoverflow.com/questions/1947753/getting-the-minimum-of-two-values-in-sql

반응형

'programing' 카테고리의 다른 글

색조 UIButton 이미지  (0) 2023.04.12
외부 DLL 파일을 저장할 위치  (0) 2023.04.12
Bash 변수 범위  (0) 2023.04.12
포스트그레스 자동 증가 카운터 재설정  (0) 2023.04.12
VBA: 조건부 - 아무것도 아니다  (0) 2023.04.12