1、
grant
select
on
职工
when
user()=
name
to
all;
这里假定系统的
grant语句支持when子句和user()的使用。用户将自己的名字作为id。
reovke
select
on
职工
when
user()=
name
from
all;
这里假定用户将自己的名字作为id,且系统的reovke语句支持when子句,系统也支持user()的使用。
2、
create
view
部门工资统计(最高工资,最低工资,平均工资)
as
select
max(工资),min(工资),avg(工资)
from
职工
group
by
部门号;
grant
select
on
部门工资统计
to
扬兰;
revoke
select
on
部门工资统计
from
扬兰;
研究研究吧有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)
国家(country)人口(population)
中国600
美国100
加拿大100
英国200
法国300
日本250
德国200
墨西哥50
印度250
根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲人口
亚洲1100
北美洲250
其他700
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。
如果使用Case函数,SQL代码如下:
SELECT SUM(population),
CASE country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END
FROMTable_A
GROUP BY CASE country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END
同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL代码如下;
SELECT
CASE WHEN salary <= 500 THEN '1'
WHEN salary >500 AND salary <= 600 THEN '2'
WHEN salary >600 AND salary <= 800 THEN '3'
WHEN salary >800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class,
COUNT(*)
FROMTable_A
GROUP BY
CASE WHEN salary <= 500 THEN '1'
WHEN salary >500 AND salary <= 600 THEN '2'
WHEN salary >600 AND salary <= 800 THEN '3'
WHEN salary >800 AND salary <= 1000 THEN '4'
ELSE NULL END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)