Sql 基于范围从同一表的两个不同列进行计数
我有这样的啤酒:Sql 基于范围从同一表的两个不同列进行计数,sql,Sql,我有这样的啤酒: MONTHS CUST CATEGORY 10 1 1 20 2 1 10 3 NULL 30 4 1 40 5 NULL 我想根据范围统计客户数量和类别数量 例如: 在10-19范围内,客户数量为2,类别为1。 请提供帮助。您可以使用如下查询: SELECT CASE WHEN MONTHS B
MONTHS CUST CATEGORY
10 1 1
20 2 1
10 3 NULL
30 4 1
40 5 NULL
我想根据范围统计客户数量和类别数量
例如:在10-19范围内,客户数量为2,类别为1。
请提供帮助。您可以使用如下查询:
SELECT CASE
WHEN MONTHS BETWEEN 10 AND 19 THEN '10-19'
WHEN MONTHS BETWEEN 20 AND 29 THEN '20-29'
WHEN MONTHS BETWEEN 30 AND 39 THEN '30-39'
WHEN MONTHS BETWEEN 40 AND 49 THEN '40-49'
ELSE '50-'
END,
COUNT(CUST) AS CUST_COUNT,
COUNT(CATEGORY) AS CATEGORY_COUNT
FROM mytable
GROUP BY CASE
WHEN MONTHS BETWEEN 10 AND 19 THEN '10-19'
WHEN MONTHS BETWEEN 20 AND 29 THEN '20-29'
WHEN MONTHS BETWEEN 30 AND 39 THEN '30-39'
WHEN MONTHS BETWEEN 40 AND 49 THEN '40-49'
ELSE '50-'
END
只要可以计算出在整个范围内产生相同值的分组表达式,就可以使用分组依据:
Select
(MONTHS - (MONTHS % 10)) As RANGE
, Count(CUST) As CUST_COUNT,
, Count(CATEGORY) As CATEGORY_COUNT
From
tbale --< :-)
Group By
(MONTHS - (MONTHS % 10)); --< Expression that would result in the same value for the entire RANGE
选择
(月-(月%10))作为范围
,将(客户)计数为客户计数,
,将(类别)计数为类别计数
从…起
tbale——<:-)
分组
(月-(月%10));——<表达式,该表达式将在整个范围内产生相同的值
Giorgos Betsos的答案调整为使用派生表。无需键入该大小写
表达式两次。符合ANSI SQL(因为在GROUP BY
子句中只允许列。)
select MONTHS, COUNT(CUST) AS CUST_COUNT, COUNT(CATEGORY) AS CATEGORY_COUNT
from
(
SELECT CASE
WHEN MONTHS BETWEEN 10 AND 19 THEN '10-19'
WHEN MONTHS BETWEEN 20 AND 29 THEN '20-29'
WHEN MONTHS BETWEEN 30 AND 39 THEN '30-39'
WHEN MONTHS BETWEEN 40 AND 49 THEN '40-49'
ELSE '50-'
END AS MONTHS,
CUST,
CATEGORY
FROM mytable
)
GROUP BY MONTHS