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 [, ...])지정된 값에서 가장 작은(최소값) 인수를 반환합니다.
문서 링크:
- MySQL http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
- 포스트그레스 https://www.postgresql.org/docs/current/functions-conditional.html
- SQL Server https://learn.microsoft.com/en-us/sql/t-sql/functions/logical-functions-least-transact-sql
업데이트 중에 최대 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 |