[英]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.