2016-01-20 38 views
0

我有一個像Average所有科目,除了一個

Student Subject Marks 
John Maths 80 
John Science 70 
John Social 90 
Raju Maths 90 
Raju Science 80 
Raju Social 70 

我想數學和所有學科的其餘部分的平均平均一個表像,因爲我利用「具有」條款如下表。

我想這樣

Subject     Average 

Maths      85 

Rest(of all subjects)  77.5 
+0

'選擇主題,AVG(引號)聚集函數,其中受試者!= 'xxx' 的組由subject'? –

+0

@AlexK。猜測不需要按主題使用**組 – StanislavL

+0

使用標記dbms。 (某些產品特定答案在下面...) – jarlh

回答

2

O/P使用CASE:

SELECT 
    CASE 
    WHEN Subject = 'Math' THEN Subject 
    ELSE 'All Subjects' 
    END, 
    AVG(Marks) 
FROM tab 
GROUP BY 
    CASE 
    WHEN Subject = 'Math' THEN Subject 
    ELSE 'All Subjects' 
    END 
+0

我們不能不使用CASE? – Satish

+0

@Satish,案件有什麼問題? – jarlh

+0

雅與CASE的罰款,但事情是,因爲我是新的plsql,所以我想它以簡單的方式 – Satish

1

case語句可以作爲一個分組字段,就像這樣:

select CASE subject WHEN 'Maths' THEN subject ELSE 'Others' END as Subject, 
     AVG(Marks) as Average 
from tbl 
group by CASE subject WHEN 'Maths' THEN subject ELSE 'Others' END 

希望有所幫助。

+0

這是一個案例表達。 (它會返回一個值。) – jarlh

+0

我們可以用很簡單的方法做到這一點嗎? – Satish

1

使用CASE表達式在派生表中執行主題替換。然後在它的結果做GROUP BY:(核心ANSI SQL-99,加上F591, 「派生表」 功能)

select subject, avg(marks) 
from 
(
    select case when Subject <> 'Maths' then 'Rest(of all subj)' else subject end, 
      Marks 
    from tablename 
) dt 
group by subject 

沒有一個CASE

select Subject, avg(marks) 
from 
(
select Subject, marks from tablename where Subject = 'Maths' 
union all 
select 'Rest(of all subj)', marks from tablename where Subject <> 'Maths' 
) 
group by Subject 

甚至更​​簡單,正如dnoeth所建議的那樣:

select 'Maths' as Subject, avg(marks) from tablename where Subject = 'Maths' 
union all 
select 'Rest(of all subj)', avg(marks) from tablename where Subject <> 'Maths' 
+0

如何簡化爲:'select Subject,'avg(marks)from tablename where Subject ='Maths' union all select'Rest(of all subj)',avg(marks)from tablename where Subject <>'Maths'' – dnoeth

+0

謝謝Jarlh。' <>'這是什麼意思? – Satish

+0

@dnoeth,當然......我也會添加一個。謝謝! – jarlh

1

對條件A ggregation。當然它可能會混淆一些。

AVG(1,2,NULL) = 1.51因爲,從TBL排除的NULL

SELECT 
    AVG(CASE 
    WHEN Subject = 'Maths' THEN Marks 
    ELSE NULL 
    END) "Maths", 
AVG(CASE 
    WHEN Subject = 'Maths' THEN NULL 
    ELSE Marks 
    END) "Rest Of All" 
FROM tab 
相關問題