我想对符合条件colA <= x < colB
的表格中的条目数进行分组和计数
假设我有下表:
index Game MinAgeInclusive MaxAgeExclusive -------------------------------------------------------- 1 Candy Land 3 8 2 Checkers 5 255 3 Chess 12 255 4 Sorry! 6 12 5 Monopoly 10 30
(这不是我正在做的事情,但它通过我的设置抽象了许多其他并发症)
假设我想要一张表格,告诉我有多少游戏适合不同年龄段:
Age NumberOfAgeAppropriateGames ---------------------------------- 0 0 ... 3 1 4 1 5 2 6 3 7 3 8 2 9 2 10 3 ... 40 2
我当然可以获得单一年龄的价值:
SELECT
COUNT(*)
FROM GameTable
WHERE MinAgeInclusive <= age AND age < MaxAgeExclusive
我知道如何获得具有给定MaxAgeExclusive
SELECT
MaxAgeExclusive, COUNT(*) AS GameCount
FROM GameTable
GROUP BY MaxAgeExclusive
但我无法弄清楚如何做到这两点。
由于我的实际应用程序是在包含数百万个条目的表上执行此操作,并且可能必须确定数千个x
值的计数,所以我希望通过完成所有操作可以最大限度地提高性能一个查询。
答案 0 :(得分:6)
要以一种相当通用的方式执行此操作,您可能最好为此创建一个辅助数字表,其中包含从0到最大值的数字序列,然后使用类似下面的内容。
SELECT
COUNT(*) AS GameCount, N.Number
FROM Numbers N
LEFT OUTER JOIN GameTable ON
MinAgeInclusive <= N.Number AND N.Number < MaxAgeExclusive
WHERE N.Number < 100
GROUP BY N.Number
答案 1 :(得分:1)
检查的年龄范围将在10到50之间。
WITH Age_Tbl
AS
(
SELECT 10 AS Age
UNION ALL
SELECT Age+1
FROM Age_Tbl
WHERE Age+1 <= 50
)
SELECT Age,
(select COUNT(*)
FROM GameTable G
WHERE A.Age between G.Min and G.Max) NumberOfAgeAppropriateGames
from Age_Tbl A
编辑:正如Martin Smith评论的那样,它只能在MS SQL Server中使用。