分組求最大最小值

2021-04-17 21:09:07 字數 4032 閱讀 7437

--

按某一欄位分組取最大(小)值所在行資料

/*資料如下:

name val memo

a    2   a2(a第二個值)

a    1   a1--a第乙個值

a    3   a3:a第三個值

b    1   b1--b第乙個值

b    3   b3:b第三個值

b    2   b2b2b2b2

b    4   b4b4

b    5   b5b5b5b5b5

*/--

建立表並插入資料:

create

table

tb(name

varchar(10

),val

int,memo

varchar(20

))insert

into

tb values('

a',   

2,  

'a2(a第二個值)')

insert

into

tb values('

a',   

1,  

'a1--a第乙個值')

insert

into

tb values('

a',   

3,  

'a3:a第三個值')

insert

into

tb values('

b',   

1,  

'b1--b第乙個值')

insert

into

tb values('

b',   

3,  

'b3:b第三個值')

insert

into

tb values('

b',   

2,  

'b2b2b2b2')

insert

into

tb values('

b',   

4,  

'b4b4')

insert

into

tb values('

b',   

5,  

'b5b5b5b5b5')

go--

一、按name分組取val最大值所在行資料。

--方法1:

selecta.*

from

tb a

where

val =(

select

max(val)

from

tb where

name

=a.name)

order

bya.name

--方法2:

selecta.*

from

tb a

where

notexists

(select

1from

tb where

name

=a.name

andval

>

a.val)

--方法3:

selecta.*

from

tb a,(

select

name,

max(val) val

from

tb group

byname) b

where

a.name

=b.name

anda.val

=b.val

order

bya.name

--方法4:

selecta.*

from

tb a

inner

join

(select

name ,

max(val) val

from

tb group

byname) b

ona.name

=b.name

anda.val

=b.val

order

bya.name

--方法5

selecta.*

from

tb a

where

1>

(select

count(*

) from

tb where

name

=a.name

andval

>

a.val )

order

bya.name

/*name       val         memo                

---------- ----------- --------------------

a          3           a3:a第三個值

b          5           b5b5b5b5b5

*/--

二、按name分組取val最小值所在行資料。

--方法1:

selecta.*

from

tb a

where

val =(

select

min(val)

from

tb where

name

=a.name)

order

bya.name

--方法2:

selecta.*

from

tb a

where

notexists

(select

1from

tb where

name

=a.name

andval

<

a.val)

--方法3:

selecta.*

from

tb a,(

select

name,

min(val) val

from

tb group

byname) b

where

a.name

=b.name

anda.val

=b.val

order

bya.name

--方法4:

selecta.*

from

tb a

inner

join

(select

name ,

min(val) val

from

tb group

byname) b

ona.name

=b.name

anda.val

=b.val

order

bya.name

--方法5

selecta.*

from

tb a

where

1>

(select

count(*

) from

tb where

name

=a.name

andval

<

a.val)

order

bya.name

分組查詢最大 最小值sql

經典題目 查詢每個班級的最高分,查詢每種日誌的最晚記錄 1.查詢每個班級的最高分 不考慮同一分數的 思路 首先利用max group by取出每組最高的分數,再與表自連線 sql語句 select t1.id,t1.name,t1.calssid,t2.score from t zhb t1 sel...

分組查詢最大 最小值sql

經典題目 查詢每個班級的最高分,查詢每種日誌的最晚記錄 1.查詢每個班級的最高分 不考慮同一分數的 sql語句 select id,name,calssid,max score from select from t zhb order by score desc a group by calssid...

C PTA 求最大值最小值

用指標作函式引數,程式設計序求一維陣列中的最大和最小的元素值。函式介面定義 void maxmin int arr,int pt1,int pt2,int n 其中 arr pt1 pt2 n都是使用者傳入的引數,n為元素個數。函式求指標arr所指向的一維陣列中的最大和最小的元素值,並將最大值和最小...