簡體   English   中英

計數與條件不同

[英]COUNT DISTINCT with CONDITIONS

我想根據特定條件計算列中不同項目的數量,例如,如果表是這樣的:

tag | entryID
----+---------
foo | 0
foo | 0
bar | 3

如果我想將不同標簽的數量計算為“標簽計數”,並將條目 id > 0 的不同標簽的數量計算為同一個表中的“正標簽計數”,我該怎么辦?

我現在從兩個不同的表中進行計數,在第二個表中我只選擇了 entryID 大於零的那些行。 我認為應該有更緊湊的方法來解決這個問題。

你可以試試這個:

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...)很容易。 第二個看起來有些復雜,實際上和第一個一樣,只是你使用case...when子句。 case...when子句中,您只過濾正值。 零或負值將被評估為null並且不會包含在計數中。

這里要注意的一件事是,這可以通過閱讀一次表格來完成。 當您似乎必須兩次或更多次閱讀同一張表時,實際上可以通過閱讀一次來完成,在大多數情況下。 因此,它將以更少的 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]

第一個字段是標簽,第二個字段是整個計數,第三個字段是正數。

這可能有效:

SELECT Count(tag) AS 'Tag Count'
FROM Table
GROUP BY tag

SELECT Count(tag) AS 'Negative Tag Count'
FROM Table
WHERE entryID > 0
GROUP BY tag

當 [Entry Id]>0 時,Code 統計 Tag 和 Entry ID 的唯一/不同組合

select count(distinct(concat(tag,entryId)))
from customers
where id>0

在輸出中,它將顯示唯一值的計數希望這有幫助

這也可能有效:

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

您需要在左連接中而不是 where 子句中使用 entryID 條件,以確保在第一個 DISTINCT 中正確計算 entryID 為 0 的任何項目。

我同意@ntalbs的解決方案,如果你想在另一列數據的條件有效時計算一列的數據,你可以這樣做

select
  count(distinct tag) as tag_count,
  count(distinct tag, case when entryId > 0 then tag end) as positive_tag_count
from
  your_table_name;

在第 3 行,我在distinct旁邊添加了列名,因此當 entryId 大於 0 時,它會計算不同的標簽

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM