请教一个SQL

zedan 2009-04-09 10:52:40
表数据:
a b
1 10
2 20
3 30
4 40
5 50

请帮忙写个SQL,得到表里的数据 b列大于20和大于40的各有多少条数据,即

result:
>20 3
>40 1

先谢谢了。
...全文
123 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ws_hgo 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zedan 的回复:]
谢谢各位了。

性能方面感觉是不是小梁的较好点?
[/Quote]
是的用小梁的
小梁10分
我8分
呵呵
zedan 2009-04-09
  • 打赏
  • 举报
回复
谢谢各位了。

性能方面感觉是不是小梁的较好点?
ws_hgo 2009-04-09
  • 打赏
  • 举报
回复
create TABLE #TT (a INT,b INT)
INSERT INTO #TT
SELECT 1,10 UNION ALL
SELECT 2,20 UNION ALL
SELECT 3,30 UNION ALL
SELECT 4,40 UNION ALL
SELECT 5,50

select sum(case when b>20 then 1 else 0 end) '大于20的',
sum(case when b>40 then 1 else 0 end) '大于40的'
from #TT

大于20的 大于40的
----------- -----------
3 1

(1 行受影响)
ks_reny 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangCK 的回复:]
SQL codeSELECT
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END ,
COUNT(*)
FROM tb
GROUP BY
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END
[/Quote]
小梁真牛,簡單通俗.
Leen_fang 2009-04-09
  • 打赏
  • 举报
回复

create table #tb1(a int,b int )
--drop table #tb1
insert into #tb1
select 1,10 union all
select 2,20 union all
select 3,30 union all
select 4,40 union all
select 5,50

--select * from #tb1
select
sum(case when b>20 then 1 else 0 end) as '>20',
sum(case when b>40 then 1 else 0 end) as '>40'
from #tb1
greymouseyu 2009-04-09
  • 打赏
  • 举报
回复

SELECT
'>20',count([b])
FROM [test2]
where [b]>20
union all
SELECT
'>40',count([b])
FROM [test2]
where [b]>40
百年树人 2009-04-09
  • 打赏
  • 举报
回复
---测试数据---
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([a] int,[b] int)
insert [tb]
select 1,10 union all
select 2,20 union all
select 3,30 union all
select 4,40 union all
select 5,50

---查询---
select
'>20',
sum(case when b>20 then 1 else 0 end)
from [tb]
union all
select
'>40',
sum(case when b>40 then 1 else 0 end)
from [tb]


---结果---

---- -----------
>20 3
>40 1

(所影响的行数为 2 行)
xskozil 2009-04-09
  • 打赏
  • 举报
回复
select count(*) as result from 表名 where b>20


select count(*) as result from 表名 where b<40
liangCK 2009-04-09
  • 打赏
  • 举报
回复
---------------------------------
-- Author: liangCK 小梁
---------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (a INT,b INT)
INSERT INTO @T
SELECT 1,10 UNION ALL
SELECT 2,20 UNION ALL
SELECT 3,30 UNION ALL
SELECT 4,40 UNION ALL
SELECT 5,50

--SQL查询如下:

SELECT
CASE WHEN B>40 THEN '>40'
WHEN B>=20 THEN '>20' END ,
COUNT(*)
FROM @T
GROUP BY
CASE WHEN B>40 THEN '>40'
WHEN B>=20 THEN '>20' END
HAVING CASE WHEN B>40 THEN '>40'
WHEN B>=20 THEN '>20' END IS NOT NULL

you_tube 2009-04-09
  • 打赏
  • 举报
回复
select count(1) result from tab where b > 20
union
select count(1) result from tab where b > 40
liangCK 2009-04-09
  • 打赏
  • 举报
回复
SELECT
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END ,
COUNT(*)
FROM tb
GROUP BY
CASE WHEN B>=40 THEN '>40'
WHEN B>=20 THEN '>20' END
you_tube 2009-04-09
  • 打赏
  • 举报
回复
盗用楼上数据
create TABLE #TT (a INT,b INT)
INSERT INTO #TT
SELECT 1,10 UNION ALL
SELECT 2,20 UNION ALL
SELECT 3,30 UNION ALL
SELECT 4,40 UNION ALL
SELECT 5,50

select case when b>20 then b end '大于20的',
case when b >40 then b end '大于40的'
from #TT
ORDER BY b desc
/*
大于20的 大于40的
----------- -----------
50 50
40 NULL
30 NULL
NULL NULL
NULL NULL*?

(5 行受影响)
zedan 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ws_hgo 的回复:]
SQL codecreateTABLE#TT (aINT,bINT)INSERTINTO#TTSELECT1,10UNIONALLSELECT2,20UNIONALLSELECT3,30UNIONALLSELECT4,40UNIONALLSELECT5,50selectsum(casewhenb>20then1else0end)'大于20的',sum(casewhenb>40then1else0end)'大于40的'from#TT

大于20的 大于40的----------- -----------31(1行受影响)
[/Quote]

这个的结果是对的,不过要进行--行列转换, 麻烦啊。
zedan 2009-04-09
  • 打赏
  • 举报
回复
发现小梁的有点问题,得到的结果是

大于20的 大于40的
----------- -----------
20 50
30
40

而真正要的结果是
大于20的 大于40的
----------- -----------
30 50
40
50

34,838

社区成员

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

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