簡體   English   中英

獲取符合特定條件的按行分組的計數

[英]Get a count of grouped by rows that match certain criteria

我在essencwe中有一張桌子看起來像這樣:

╔═════════╦═══════╦══════╗
║ Balance ║ Limit ║ Type ║
╠═════════╬═══════╬══════╣
║    6    ║   2   ║   1  ║
║    3    ║   3   ║   2  ║
║    2    ║   5   ║   2  ║
╚═════════╩═══════╩══════╝

現在,我要做的是對“余額”(按“類型”分組)進行計數,然后返回“違規”類型的計數。 也就是說,如果其總余額不高於該類型的當前最高限額。

因此,在上面的示例中(查看“限制和類型”,它是一個固定的結構:

第1行中的余額必須至少為3,第2行和第3行中的余額之和至少必須為6。

因此,我希望我的查詢返回1(指示有一個Type的總余額太低)。

當然,如果表為空,我希望返回零。

我該如何實現? 我之前做過類似的事情,但不必按類型分組。 因此,我可以這樣做:

SELECT Rowcount = COUNT(IIF (Balance - Limit < 1, 1, NULL)) FROM Table

首先,您需要獲取每種類型的最大限制:

SELECT  Balance,
        Limit = MAX(Limit) OVER(PARTITION BY Type),
        Type
FROM    [Table];

然后,您可以在計數中使用此最大限制,不幸的是,您無法將窗口函數放置在COUNT內,因此您將需要使用子查詢,然后僅對不同類型進行計數:

SELECT  [RowCount] = COUNT(DISTINCT Type)
FROM    (   SELECT  Balance,
                    Limit = MAX(Limit) OVER(PARTITION BY Type),
                    Type
            FROM    [Table]
        ) AS t
WHERE   Balance <= Limit;

您也可以將條件移至WHERE因為您沒有執行任何其他計數。


編輯

我可能已經把這個復雜化了。 您可以按type在子查詢中分組以獲取最大限制和余額的總和,然后計算該子查詢的結果:

SELECT  [RowCount] = COUNT(Type)
FROM    (   SELECT  Balance = SUM(Balance),
                    Limit = MAX(Limit),
                    Type
            FROM    [Table]
            GROUP BY Type
        ) AS t
WHERE   Balance <= Limit;

要么:

SELECT  [RowCount] = COUNT(Type)
FROM    (   SELECT  Type
            FROM    [Table]
            GROUP BY Type
            HAVING SUM(Balance) <= MAX(Limit)
        ) AS t

可能此查詢有助於:

SELECT COUNT(Type) AS types_with_too_low_balances_count
FROM (
  SELECT Type
    FROM table_name
    GROUP BY Type
    HAVING SUM(Balance) <= MAX(Limit)
) a

SQL Fiddle上測試

暫無
暫無

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

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