sql的一些高级查询

group by结合having

统计部门不为总经办的总工资大于100的部门

select sum(salary),emp from emp_salary e where e.emp not in ("总经办") group by e.emp having > 100
多表子查询

eg:

SELECT     P.ProductID, P.Name, P.ProductNumber, M.Name AS ProductModelName
FROM         Production.Product AS P INNER JOIN
(SELECT     Name, ProductModelID
 FROM          Production.ProductModel) AS M 
ON P.ProductModelID = M.ProductModelID

结合cout使用,统计某一个产品销量多少,需要显示产品的名称

SELECT     P.ProductID, P.Name, P.ProductNumber, M.fee AS fee
FROM         Production.Product AS P INNER JOIN
(SELECT     ProductModelID,count(*)
 FROM          Production.ProductModel group by ProductModelID) AS M 
ON P.ProductModelID = M.ProductModelID
case when then用法
普通用法

查询user表里面的成员性别,当sex为1的时候为“男”,为“0”的时候为女,否则为其他

select u.id,u.name,u.sex,
  (case u.sex
    when 1 then '男'
    when 2 then '女'
    else '其他'
    end
    )性别
    from users u;
查询结果显示:
     ID NAME                        SEX 性别

     1 张一                            空的
     2 张二                          1 男
     3 张三                            空的
    4 张四                            空的

如果不希望显示sex的话,sql语句为:

select u.id,u.name,
( case u.sex
  when 1 then "男",
  when 2 then "女"
  else "其他"
  end
)性别
from user u
与sum和count结合进行统计

与sum结合,查询男生和女生分别有多少人

select 
sum(case u.sex when 1 then 1 else 0 end)男性,
sum(case u.sex when 2 then 1 else 0 end)女性,
sum(case when u.sex <> 2 and s.sex <> 1 then 1 else 0 end)其他
from user u

与count结合

select
count(case u.sex when 1 then 1 end)男性,
count(case when u.sex=2 then 1 end)女,
count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空
from users u;

上面两个结果都:

    男性                 性别为空
---------- ---------- ----------
         3          2          0

统计某一段年龄区间的人数,按性别区分

select u.sex,
(sum(case when u.age <= 20 then 1 else 0 end) as '[0-20]的人',
 sum(case when u.age between 21 and 40 then 1 else 0 end) as '(20-40]的人'sum(case when u.age >40 then 1 else 0 end) as 40岁以上的人
) from user u group by u.sex
特殊情况,查询出来的字段转换成int

在SQL SERVER 2005中,将表中字符串转换为数字的函数共2个:
1. convert(int,字段名) 例如:select convert(int,’fee’)
2. cast(字段名 as int) 例如:select cast(‘fee’ as int)
其实,一般情况下没有必要把字符串转换为数字类型

计算多个字段的和
select a+b as C from tables
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值