2015-10-19 27 views
0

減去總我想做到以下幾點:如何從調整的總和在SQL

1)在表中查找
2)找到滿足特定條件的總行總行。

3)從(2)中減去(1)。

樣品表Employees:

EmployeeID Nationality 
    1   Brazil 
    2   Korea 
    3   Germany 
    4   Brazil 
    5   Brazil 

我已經試過:

SELECT count(EmployeeID) as Total from Employees 
    UNION 
    SELECT count(EmployeeID) as Brazilians from Employees 
    WHERE Nationality = 'Brazil' 

結果:

Total 
5 
3 

第1行會給我的員工總數。第2排會給我巴西員工。 我使用了UNION來查看是否可以從第1行中減去第2行。

我可以使用CASE和SUM()來完成此操作,但這需要row_number()函數,我不能使用給定的I使用WebSQL。有沒有另外一種方法來索引這些行可以減去?

是否有另一種方法可以用來解決這個看似簡單的問題?

+0

糾正我,如果我錯了,但你的工會的基礎上,第一行是行的總數量,第二是所有的巴西員工,然後你想減去,就像5 - 3基於你的查詢? – Japongskie

+0

哎呀,我的錯誤,犯了一個錯字:Row1 = Total和Row2 =巴西員工。是的,我的目標是在此之後做5-3。 – tkim90

回答

5

如何計算不符合該條件的行?

SELECT COUNT(EmployeedID) as non_brazilians 
FROM Employees 
WHERE Nationality <> 'Brazil'; 
+1

!=比較已被棄用,我不確定是否所有的dbms產品都支持它。我的提示是使用<>代替。 – jarlh

0

試試這個:

SELECT count(*) AS TotalRows 
     , (SELECT count(EmployeeID) FROM WHERE Nationality = 'Brazil') as Brazilians 
     , (count(*) - (SELECT count(EmployeeID) FROM WHERE Nationality = 'Brazil')) AS Subtract1From2 
FROM Employee 
1

可以使用條件彙總:

select count(*) as TotalRows, 
     sum(case when Nationality = 'Brazil' then 1 else 0 end) as Brazilians, 
     sum(case when Nationality <> 'Brazil' then 1 else 0 end) as nonBrazilians 
from Employee; 

這假定Nationality從未NULL。如果這是可能的,最後一個條件應該是:

 sum(case when Nationality = 'Brazil' then 0 else 1 end) as nonBrazilians