2018 年,在我大學的一次資料庫測驗中(我多次失敗),他們有這個任務:
Napisati T-SQL funkciju koja prima 3 realna broja,te kao rezultat vra?a onaj broj koji ima najve?u apsolutnu vrijednost。Ako slu?ajno istu najve?u apsolutnu vrijednost imaju dva ili tri broja potrebno je vratiti zbroj tih brojeva。
那是:
撰寫一個接受 3 個實數的 T-SQL 函式,結果它回傳具有最大絕對值的數字。如果意外地由兩個或三個數字得到相同的最大絕對值,則有必要回傳這些數字的總和。
你會怎么解決?
這是我的嘗試,我不知道它是否正確,也不知道如何在我的電腦上實際測驗它:
CREATE FUNCTION max_abs3(@x, @y, @z DECIMAL) RETURNS DECIMAL
BEGIN
IF ABS(@x)=ABS(@y) AND ABS(@y)=ABS(@z)
BEGIN
RETURN @x @y @z;
END;
IF ABS(@x)=ABS(@y) AND ABS(@x)>ABS(@z)
BEGIN
RETURN @x @y;
END;
IF ABS(@x)=ABS(@z) AND ABS(@x)>ABS(@y)
BEGIN
RETURN @x @z;
END;
IF ABS(@y)=ABS(@z) AND ABS(@y)>ABS(@x)
BEGIN
RETURN @y @z;
END;
IF ABS(@x)>ABS(@y) AND ABS(@x)>ABS(@z)
BEGIN
RETURN @x;
END;
IF ABS(@y)>ABS(@z) AND ABS(@y)>ABS(@x)
RETURN @y;
END;
RETURN @z;
END;
我只設法在我的計算機上安裝了 SQLite,它顯然不支持自定義 SQL 函式。
uj5u.com熱心網友回復:
假設“在 2018 年”你的意思是解決方案必須在 2018 年作業(所以 SQL Server 2017 或更早版本),那么你可以使用一個VALUES子句將你的值變成一個資料集,然后檢查該值是否是最大值值,然后聚合。
由于您需要自己執行此操作,因此函式內部的邏輯如下所示:我讓您將其適當地放入FUNCTION(理想情況下是行內表值函式):
SELECT SUM(V.R)
FROM (VALUES(@x),(@y),(@z))V(R)
WHERE ABS(V.R) = (SELECT MAX(sq.R)
FROM (VALUES(@x),(@y),(@z))sq(R));
db<>小提琴
在 SQL Server 2022 中有一個新函式,GREATEST如下所示:
WITH V AS(
SELECT R
FROM (VALUES(@x),(@y),(@z))V(R))
SELECT SUM(R)
FROM V
WHERE ABS(V.R) = GREATEST(@x,@y,@z);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481349.html
下一篇:使用值對查找行并找到完全匹配的組
