2017-07-11 9 views
1

2つのクエリがあり、そのうちの2つのクエリの最大値を取得したいとします。2つのサブクエリのSQL MAX値

MAX((SELECT COUNT(p.[ItemID]) FROM [dbo].[Table] p WHERE HasHuman=0), 
     (SELECT COUNT(p.[ItemID]) FROM [dbo].[Table] p WHERE HasHuman=1)) 
+0

UNIONをALLで派生テーブル – jarlh

答えて

1

あなたは、単一のクエリで両方の結果を計算して、TOPを適用することができます。

select top 1 
    HasHuman, 
    COUNT(p.[ItemID]) as cnt 
from [dbo].[Table] 
group by HasHuman 
order by cnt desc 
+0

Humanは1と0以外の値を持つことができますが、 'WHERE HasHuman IN(0,1)'を追加した場合はうまくいきますか? – Nathan

+0

@Nathaniel:もちろん、私はそれが一種の旗だと考えました。 – dnoeth

1
SELECT MAX(RC) 
FROM (SELECT COUNT(p.ItemID) AS RC FROM dbo.[Table] 
     WHERE HasHuman=0 
     UNION 
     SELECT COUNT(p.ItemID) AS RC FROM dbo.[Table] 
     WHERE HasHuman=1 
     ) A 
+1

あなたの答えを説明してください。 –

2

あなたも、単一のクエリでこれを行うことができます:

SELECT 
    CASE WHEN SUM(CASE WHEN HasHuman=0 THEN 1 ELSE 0 END) > 
       SUM(CASE WHEN HasHuman=1 THEN 1 ELSE 0 END) 
     THEN SUM(CASE WHEN HasHuman=0 THEN 1 ELSE 0 END) 
     ELSE SUM(CASE WHEN HasHuman=1 THEN 1 ELSE 0 END) END 
FROM [dbo].[Table] 
WHERE ItemID IS NOT NULL -- you were not counting NULLs 
関連する問題