iT邦幫忙

0

請問如何從多筆資料中獲取最小值?

請問
以下是我的數據
id        val1           val2
1             777              184
2             5616              205
3              3                20

想要下SQL取出最小值3跟其對應的ID 3

vbe02607 iT邦新手 5 級 ‧ 2018-03-08 15:51:59 檢舉
_

2 個回答

2
暐翰
iT邦大師 9 級 ‧ 2018-03-08 15:36:53
最佳解答

問題:

請問如何從多筆資料中獲取最小值?

回答

我觀察你的資料結構跟結果,你應該是要比對兩個欄位
從中比較得到最小的值吧
以下是我的寫的測試跟範例

--建立測試資料
create table #Tem_Table ([ID] int,val1 int,val2 int );
insert into #Tem_Table ([ID],val1,val2) values 
	(1,777,184)
	,(2,5616,205)
	,(3,3,20)
;
select * from #Tem_Table;
--方法一:SQL版本
with Tem_Table as (
	select id
		,case when val2>val1 then val1  --藉由比值把兩個欄位合併成一個最小值欄位
			else val2 
		end as min_value 
	from #Tem_Table
)
select * from Tem_Table T100
where T100.min_value = (select min(min_value) from Tem_Table ); --篩選出最小值 

得到結果:

成品估算: 0.0065869


--方法二:T-SQL版本
declare @最小值 int ,@val1欄最小值 int , @val2欄最小值 int
select @val1欄最小值 = (select min(val1) val from #Tem_Table)
select @val2欄最小值 = (select min(val2) val from #Tem_Table)
IF( @val1欄最小值 < @val2欄最小值 )		
BEGIN
	select id,val1 min_value from #Tem_Table T100
	where T100.val1 = @val1欄最小值;
END	;
IF( @val2欄最小值 < @val1欄最小值 )
BEGIN
	select id,val2 min_value from #Tem_Table T100
	where T100.val2 = @val2欄最小值;
END	;

結果:

成品估算:
0.0032945 * 4 = 0.013178


結論:
用第一個比較好

vbe02607 iT邦新手 5 級 ‧ 2018-03-08 15:52:52 檢舉

是的,謝謝大大
請問有T-SQL作法嗎?
哪種比較好?

暐翰 iT邦大師 9 級 ‧ 2018-03-08 15:54:39 檢舉

回應更新了
裡面回答你的問題

vbe02607 iT邦新手 5 級 ‧ 2018-03-08 15:58:56 檢舉

感謝大大!!!

1
神Q超人
iT邦新手 3 級 ‧ 2018-03-08 15:17:40

先做由小到大的排序,然後取第一筆就好

SELECT TOP(1) *
FROM myTable
ORDER BY val1

--只想取id和val1的話就把 * 換成欄位名稱
SELECT TOP(1) id,val1
FROM myTable
ORDER BY val1

如果最小值有一筆以上的資料,就用下面這種方式

SELECT *
FROM myTable
WHERE val1 IN (SELECT MIN(val1) FROM myTable)

記得以上的myTable都要改成你的資料表名稱/images/emoticon/emoticon13.gif

vbe02607 iT邦新手 5 級 ‧ 2018-03-08 15:52:21 檢舉

謝謝大大,抱歉我敘述有問題
我是想要下面大大的結果

不會不會!!!
那個大大真的很厲害XD
我也要多學習才行/images/emoticon/emoticon13.gif

我要發表回答

立即登入回答