T-SQL return MIN 和 MAX 不同的行值

T-SQL return different row value for MIN and MAX

我有一些数据如下所示:

LA Code Local_Authority         Region          Spend per pupil
----------------------------------------------------------------
831     Derby                   East Midlands   4370
830     Derbyshire              East Midlands   4600
822     Bedford                 East of England 4694
873     Cambridgeshire          East of England 4455
301     Barking & Dagenham      London          5377
302     Barnet                  London          4965
330     Birmingham              West Midlands   5483
331     Coventry                West Midlands   4970

我想创建一个摘要 table 来显示一个区域,以及地方当局的最低支出和最高支出,所以像这样:

Region            Min_LA_Name    Min_Amount   Max_LA_Name        Max_Amount
---------------------------------------------------------------------------
East Midlands     Derby          4370         Derbyshire         4600
East of England   Cambridgeshire 4455         Bedford            4694
London            Barnet         4965         Barking & Dagenham 5377
West Midlands     Coventry       4970         Birmingham         4970

我得到的代码如下:

SELECT 
    Region,
    (SELECT Local_Authority 
     FROM LASpendPerPupil_df 
     GROUP BY REGION 
     HAVING MIN("Spend per pupil")) AS Min_LA_Name, 
    MIN("Spend per pupil") AS Min_Amount,
    (SELECT Local_Authority 
     FROM LASpendPerPupil_df 
     GROUP BY REGION 
     HAVING MAX("Spend per pupil")) AS Max_LA_Name,
    MAX("Spend per pupil") AS Max_Amount
FROM
    LASpendPerPupil_df
GROUP BY 
    REGION;

我得到了最小值和最大值的正确输出,但是地方当局名称列只是重复第一个区域的最小值和最大值,所以像这样:

Region            Min_LA_Name    Min_Amount   Max_LA_Name       Max_Amount
---------------------------------------------------------------------------
East Midlands     Derby          4370         Derbyshire         4600
East of England   Derby          4455         Derbyshire         4694
London            Derby          4965         Derbyshire         5377
West Midlands     Derby          4970         Derbyshire         4970

谁能帮我解决这个问题?我是 Stack Overflow 的新手,也是 SQL 的新手,如果我没有正确发布,我深表歉意。

试试这个:

select a.region,b.la_name as min_la_name,a.min_amount,c.la_name as max_la_name,a.max_amount
from
(select region,min([SPEND PER PUPIL])  as min_amount, max([SPEND PER PUPIL]) as max_amount
from your_table
group by region ) a
left join
your_table b
on a.region = b.region and a.min_amount = b.[SPEND PER PUPIL]
left join
your_table c
on a.region = c.region and a.max_amount = c.[SPEND PER PUPIL];

如有任何说明,请告诉我

编辑为实际正确,样本 data/script。

IF OBJECT_ID('tempdb..#Tmp') IS NOT NULL
    DROP TABLE #Tmp 

CREATE TABLE #Tmp (
    [LA Code] int
    , Local_Authority VARCHAR(50)
    , Region VARCHAR(50)
    , [Spend per pupil] INT);   

INSERT INTO #Tmp VALUES
(831,'Derby','East Midlands',4370),
(830,'Derbyshire','East Midlands', 4600),
(822,'Bedford','East of England', 4694),
(873,'Cambridgeshire','East of England', 4455),
(301,'Barking & Dagenham','London',5377),
(302,'Barnet','London',4965),
(330,'Birmingham','West Midlands',5483),
(331,'Coventry','West Midlands',4970)

SELECT
    x.Region
    , (SELECT Local_Authority 
        FROM #Tmp WHERE Region=x.Region AND [Spend per pupil]=MaxSpend) AS MaxAuth
    , MaxSpend
    , (SELECT Local_Authority 
        FROM #Tmp WHERE Region=x.Region AND [Spend per pupil]=MinSpend) AS MinAuth
    , MinSpend 
FROM
    (SELECT Region, MAX([Spend per pupil]) AS MaxSpend 
    FROM #Tmp GROUP BY Region) x
LEFT OUTER JOIN
    (SELECT Region, MIN([Spend per pupil]) AS MinSpend 
    FROM #Tmp GROUP BY Region) y on x.Region = y.region