select sum(case when fen < 100 and fen >=80 then 1 else 0 end) 优秀人数, sum(case when fen < 80 and fen >=60 then 1 else 0 end) 及格人数, sum(case when fen < 60 and fen >=0 then 1 else 0 end) 不及格人数 from 表名
--建表 CREATE TABLE tbl (NAME VARCHAR2(20), score NUMBER ); --插入测试数据 INSERT INTO TBL SELECT '小明', 90 FROM DUAL UNION ALL SELECT '小白', 80 FROM DUAL UNION ALL SELECT '小黑', 60 FROM DUAL UNION ALL SELECT '小红', 70 FROM DUAL UNION ALL SELECT '小兰', 92 FROM DUAL UNION ALL SELECT '小心', 54 FROM DUAL UNION ALL SELECT '小K', 83 FROM DUAL; --查询 SELECT BAND, COUNT(1) FROM (SELECT CASE WHEN SCORE >= 80 THEN '优秀' WHEN SCORE >= 60 AND SCORE <= 79 THEN '及格' ELSE '不及格' END BAND FROM TBL) GROUP BY BAND;
SQL> conn scott/tiger 已连接。 SQL> ed 已写入 file afiedt.buf 1 CREATE TABLE test ( 2 name varchar(20), 3 fen NUMBER 4* ) SQL> /表已创建。SQL> @test.sql已创建 1 行。 已创建 1 行。 已创建 1 行。 已创建 1 行。 已创建 1 行。 已创建 1 行。 已创建 1 行。SQL> ed 已写入 file afiedt.buf 1* SELECT * FROM test SQL> /NAME FEN -------------------- ---------- 小明 90 小白 80 小黑 60 小红 70 小兰 92 小心 54 小K 83已选择7行。SQL> ed 已写入 file afiedt.buf 1 select sum(case when fen BETWEEN 80 and 100 then 1 else 0 end) 优秀人数, 2 sum(case when fen BETWEEN 60 and 79 then 1 else 0 end) 及格人数, 3 sum(case when fen BETWEEN 0 and 59 then 1 else 0 end) 不及格人数 4* from test SQL> / 优秀人数 及格人数 不及格人数 ---------- ---------- ---------- 4 2 1SQL>ls几位 动作好快,大赞
问下这种 insert into from dual 的方式跟 直接values('','')有什么区别么? 那种方式好?为什么要用这种方式?
sum(case when fen < 80 and fen >=60 then 1 else 0 end) 及格人数,
sum(case when fen < 60 and fen >=0 then 1 else 0 end) 不及格人数
from 表名
CREATE TABLE tbl
(NAME VARCHAR2(20),
score NUMBER );
--插入测试数据
INSERT INTO TBL
SELECT '小明', 90
FROM DUAL
UNION ALL
SELECT '小白', 80
FROM DUAL
UNION ALL
SELECT '小黑', 60
FROM DUAL
UNION ALL
SELECT '小红', 70
FROM DUAL
UNION ALL
SELECT '小兰', 92
FROM DUAL
UNION ALL
SELECT '小心', 54
FROM DUAL
UNION ALL
SELECT '小K', 83 FROM DUAL;
--查询
SELECT BAND, COUNT(1)
FROM (SELECT CASE
WHEN SCORE >= 80 THEN
'优秀'
WHEN SCORE >= 60 AND SCORE <= 79 THEN
'及格'
ELSE
'不及格'
END BAND
FROM TBL)
GROUP BY BAND;
已连接。
SQL> ed
已写入 file afiedt.buf 1 CREATE TABLE test (
2 name varchar(20),
3 fen NUMBER
4* )
SQL> /表已创建。SQL> @test.sql已创建 1 行。
已创建 1 行。
已创建 1 行。
已创建 1 行。
已创建 1 行。
已创建 1 行。
已创建 1 行。SQL> ed
已写入 file afiedt.buf 1* SELECT * FROM test
SQL> /NAME FEN
-------------------- ----------
小明 90
小白 80
小黑 60
小红 70
小兰 92
小心 54
小K 83已选择7行。SQL> ed
已写入 file afiedt.buf 1 select sum(case when fen BETWEEN 80 and 100 then 1 else 0 end) 优秀人数,
2 sum(case when fen BETWEEN 60 and 79 then 1 else 0 end) 及格人数,
3 sum(case when fen BETWEEN 0 and 59 then 1 else 0 end) 不及格人数
4* from test
SQL> / 优秀人数 及格人数 不及格人数
---------- ---------- ----------
4 2 1SQL>ls几位 动作好快,大赞
那种方式好?为什么要用这种方式?