回答:
あなたはこれを試すことができます:
select
count(distinct tag) as tag_count,
count(distinct (case when entryId > 0 then tag end)) as positive_tag_count
from
your_table_name;
最初count(distinct...)は簡単です。2番目はやや複雑に見えますが、case...when句を使用することを除いて、最初のものと実際は同じです。ではcase...when句、あなたは正の値のみをフィルタリングします。ゼロまたは負の値はとして評価さnullれ、countには含まれません。
ここで注意すべき点の1つは、これはテーブルを1回読み取ることで実行できることです。同じテーブルを2回以上読み取る必要があると思われる場合、ほとんどの場合、実際には1回の読み取りで実行できます。その結果、少ないI / Oでタスクをはるかに速く完了します。
次のステートメントを試してください。
select distinct A.[Tag],
count(A.[Tag]) as TAG_COUNT,
(SELECT count(*) FROM [TagTbl] AS B WHERE A.[Tag]=B.[Tag] AND B.[ID]>0)
from [TagTbl] AS A GROUP BY A.[Tag]
最初のフィールドはタグになり、2番目は全体の数、3番目は正の数になります。
これもうまくいくかもしれません:
SELECT
COUNT(DISTINCT T.tag) as DistinctTag,
COUNT(DISTINCT T2.tag) as DistinctPositiveTag
FROM Table T
LEFT JOIN Table T2 ON T.tag = T2.tag AND T.entryID = T2.entryID AND T2.entryID > 0
最初のDISTINCTでentryIDが0のみのアイテムが適切にカウントされるようにするには、where句ではなく左結合にentryID条件が必要です。