2016-10-02 5 views

答えて

0
 Select Groupname,avg(column) as average 
     into #temptable 
     from tablename 
     group by groupname 

     Declare @lowvalue INT 

     select @lowvalue = top 1 [average] from #temptable order by average 

     select * from #temptable where average = @lowvalue 

    drop #temptable 
+0

最低の平均を持つグループだけを表示する必要があります。 –

0

cteは各グループの平均を返します。次に、cteから、Minimum of the Averagesを選択します。次に、両方のcteに参加して、平均が最小のグループを選択します。

with cte as (
Select Grp, AVG(Col) as ColAvg 
From MyTable 
Group by Grp 
), cte2 as (
    select Min(ColAvg) as MinAvg from ate 
) 
select a.* from cte as a 
outer apply cte2 as b 
Where a.ColAvg = b.MinAvg; 
0
SELECT 
group, avg(column) 
FROM table 
GROUP BY group, column 
HAVING avg(column) = (
SELECT TOP avg(column) 
FROM table 
GROUP BY group, column 
order by avg(column) 
) 

シンプルだが効率的ではありません。

0

グループごとの平均を計算し、最小平均を計算し、最小平均を持つすべてのグループを選択することができます。

with avg_per_group as (
select 
    grp, avg(val) as avg_val 
from 
    tablename 
group by 
    grp 
) 
select grp 
from avg_per_group 
where 
    avg_val = (select min(avg_val) from avg_per_group); 

またはあなたが(平均列に基づいて)ランクを計算し、ランク= 1を持っているすべての行を選択するには、ウィンドウ関数を使用することができます:これは、CTEを持つソリューションです

with avg_per_group as (
select 
    grp, avg(val) as avg_val 
from 
    tablename 
group by 
    grp 
), 
avg_per_group_rank as (
select 
    grp, avg_val, rank() over (order by avg_val) r 
from 
    avg_per_group 
) 
select 
    grp, avg_val 
from 
    avg_per_group_rank 
where 
    r=1; 

してください働くフィドルhereを見てください。