我有一个这样的表:
User Length WHO Bay
DOMISLOVICM 69,272 1061840 3
GASPARICM 58,608 1060570 5
GASPARICM 1,3 1060571 3
...
我想计算在每个不同的bay中有多少条记录的长度大于5。为此,我编写了以下查询:
SELECT Bay, Count(*) as Occurrences FROM Table
WHERE Length>5 group by Bay;
这是完美的,在上面的例子中它将返回:
Bay Occurrences
3 1
5 1
现在我被要求扩展查询,以包括每个bay的表中每个bay的总记录数,包括长度不超过5的记录数。示例表的结果应该是:
Bay Occurrences Totals
3 1 2
5 1 1
因为Bay 3总共有3条记录,Bay 5有1条记录。如何扩展查询?如果我使用where子句将记录分隔为长度超过5的记录,我就不能使用count(*)来计算整个记录…任何建议吗?
试试这个
编辑:这是SQL Server语法,如果它不工作在你的DB让我知道。
SELECT Bay,
SUM(CASE WHEN Length > 5 THEN 1 END) as Occurrences,
COUNT(*) as Totals
FROM Table
GROUP BY Bay;
EDIT:就像@HansUp在评论中建议的那样,完成此操作的正确访问语法是SUM(IIF([Length] > 5, 1, 0))
。