2015-11-04 135 views
0

我有一張帶有員工ID和僱員年份的EMP表。比如說2002年和2000年,我必須得到僱傭員工的數量。輸出表應該包含整個時間僱傭的員工數量。將SQL中的所有元素分組在一個元組中

所以最後很容易。我只需要寫:

SELECT COUNT(id) AS GLOBELAMOUNT FROM EMP; 

但是,我如何計算2002年僱傭員工的數量? 我可以寫:

SELECT COUNT(id) AS HIREDIN2002 FROM EMP WHERE YEAR = 2002; 

但我怎麼與上述數據結合這一個元組?

也許我應該先用Hireyear對數據進行分組,然後數一下呢?但不能真正想象我如何統計數據數年。

希望你們能幫助我。

乾杯,

安德烈

+0

你都與MySQL和SQL Server的標記這一點。這是什麼?可以對解決方案產生重大影響。 –

回答

2

使用有條件聚集,如:

SELECT COUNT(id) AS GLOBELAMOUNT, 
     COUNT(CASE WHEN YEAR=2000 THEN 1 END) AS HIREDIN2000, 
     COUNT(CASE WHEN YEAR=2002 THEN 1 END) AS HIREDIN2002 
FROM EMP; 
0

在Microsoft SQL Server(的Transact-SQL)至少,你可以使用一個彙總功能如下:

Select Distinct 
     Year 
     ,count(Id) over (Partition by Year) as CountHiredInYear 
     ,count(Id) over()     as CountTotalHires 
From EMP 

這給類似:

Year | CountHiredInYear | CountTotalHires 
2005 | 3    | 12 
2006 | 4    | 12 
2007 | 5    | 12 

另一個SQL Server的具體做法是With Rollup關鍵字。

Select Year 
     ,count(Id) as CountHires 
From  Emp 
Group by Year 
With Rollup 

這會爲每個分組級別添加一個彙總行,以及該行集的總值。所以在這裏,你會得到一個額外的行,其中Year是NULL,值爲12

0

你可以使用兩個(或更多)嵌入式查詢:

SELECT 
    (SELECT COUNT(id) FROM EMP) AS GLOBELAMOUNT, 
    (SELECT COUNT(id) FROM EMP WHERE YEAR = 2002) AS HIREDIN2002 

或CROSS JOIN:

SELECT GLOBELAMOUNT, HIREDIN2002 
FROM 
    (SELECT COUNT(id) AS GLOBELAMOUNT FFROM EMP) g CROSS JOIN 
    (SELECT COUNT(id) AS HIREDIN2002 FROM EMP WHERE YEAR = 2002) h 
相關問題