求教一个 统计数据区间的数量

沉默又寡言 2016-03-07 11:11:54
表TEMP

Id TypeName TempStar TempEnd
1 良好 12.0 15.9
2 优秀 16.0 21.9
3 一般 22.0 30.0



表 UserTemp

Id UserName TempVal
1 小明 12
2 小王 16
3 小李 15
4 小徐 16
5 小吕 20
6 小孙 31


要得到如下结果:
TypeName nber
良好 2
优秀 3
其他 1

请问如何做?谢谢
...全文
348 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
顾西昂 2016-03-07
  • 打赏
  • 举报
回复

select TypeName,count(*)
(select *,(case when (TempVal>=12.0 and TemValue<=15.9)  THEN '良好' when (TempVal>=16.0 and TemValue<=21.9) Then '优秀'
else '一般') TypeName as 
from  tab) as a group by TypeName

沉默又寡言 2016-03-07
  • 打赏
  • 举报
回复
引用 3 楼 mingqing6364 的回复:
WITH --用WITH来写更符合我的思考方式
--结果集仅要求精确分组出优秀和良好的,其余统统归类为其他
T1 AS
(
SELECT * FROM Temp WHERE TypeName IN ('优秀','良好')
),
--联合查询,将每一个人的分数转换成等级评价
T2 AS
(
SELECT
	UserTemp.*,
	ISNULL(T1.TypeName,'其他') AS TypeName
FROM
	UserTemp LEFT JOIN T1 ON UserTemp.TempVal BETWEEN T1.TempStar AND T1.TempEnd
)
--聚合统计
SELECT TypeName,COUNT(Id) AS nber FROM T2 GROUP BY TypeName
不好意思 回复错了,你的是对的,我一会在验证下一会结贴,非常感谢
沉默又寡言 2016-03-07
  • 打赏
  • 举报
回复
引用 3 楼 mingqing6364 的回复:
WITH --用WITH来写更符合我的思考方式
--结果集仅要求精确分组出优秀和良好的,其余统统归类为其他
T1 AS
(
SELECT * FROM Temp WHERE TypeName IN ('优秀','良好')
),
--联合查询,将每一个人的分数转换成等级评价
T2 AS
(
SELECT
	UserTemp.*,
	ISNULL(T1.TypeName,'其他') AS TypeName
FROM
	UserTemp LEFT JOIN T1 ON UserTemp.TempVal BETWEEN T1.TempStar AND T1.TempEnd
)
--聚合统计
SELECT TypeName,COUNT(Id) AS nber FROM T2 GROUP BY TypeName
不对啊···
沉默又寡言 2016-03-07
  • 打赏
  • 举报
回复
引用 2 楼 xiaoliuvv 的回复:
SELECT typename, (SELECT COUNT(*) FROM usertemp WHERE tempval <= tempend AND tempval >= tempstar) AS nber FROM TEMP
不在范围的,你的就查不出来了
mingqing6364 2016-03-07
  • 打赏
  • 举报
回复
WITH --用WITH来写更符合我的思考方式
--结果集仅要求精确分组出优秀和良好的,其余统统归类为其他
T1 AS
(
SELECT * FROM Temp WHERE TypeName IN ('优秀','良好')
),
--联合查询,将每一个人的分数转换成等级评价
T2 AS
(
SELECT
	UserTemp.*,
	ISNULL(T1.TypeName,'其他') AS TypeName
FROM
	UserTemp LEFT JOIN T1 ON UserTemp.TempVal BETWEEN T1.TempStar AND T1.TempEnd
)
--聚合统计
SELECT TypeName,COUNT(Id) AS nber FROM T2 GROUP BY TypeName
xiaoliuvv 2016-03-07
  • 打赏
  • 举报
回复
SELECT typename, (SELECT COUNT(*) FROM usertemp WHERE tempval <= tempend AND tempval >= tempstar) AS nber FROM TEMP
沉默又寡言 2016-03-07
  • 打赏
  • 举报
回复
@ DBA_Huangzj

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧