1、oracle关于分组排序,空值转化函数,求和函数的查询sql
sql的查询要求是查询A表中的积分值总和并进行逆序排序,并且需要关联B表中的用户名和手机号
SELECT t.USER_ID, NVL( t.USERNAME, '无效的用户' ) AS name,//空值转化函数将t结果集中的空值 全部用“无效用户” 来代替 NVL( t.PHONE, '无电话' ) AS phone, //空值转化函数将t结果集中的空值 全部用“无电话” 来代替 t.total FROM ( SELECT SUM( d.INTEGRAL_VALUE ) AS total, //求和A 表中积分值的字段 d.USER_ID, m.USERNAME, m.PHONE FROM A表 d LEFT JOIN B表 m ON d.USER_ID = m.USERID GROUP BY d.USER_ID, m.USERNAME, m.PHONE ) t //将A,B表的左连接查询结果集作为一个查询的表t 来进行最后的查询排序 where 1=1 //此处可添加where条件 ORDER BY t.TOTAL DESC //表t 按照积分总和逆序排序
最后得到的查询结果集如下图
sql分析
(1)分组查询的时候注意,查询字段必须出现在关键字GROUP BY 后面
(2)SUM(表.字段)//求和指定的字段函数
(3)NVL(表.字段,‘替代值’)//空值转换函数 将指定表字段为空是 自定转化为替代值
2、oracle关于同一列不同行合并查询的查询sql
A表
B表
A表和B表联合查询:要求将人员信息和公司职务全部联合查询出来,并且同一个人的不同列数据如公司和职务合并为一行数据
SELECT
t.userid,
t.NAME,
t.PHONE,
wmsys.wm_concat ( t.COMPANY ), //不同行同列数据进行拼接
wmsys.wm_concat ( t.DUTY ) //不同行同列数据进行拼接
FROM
(
SELECT
a.DUTY,
a.COMPANY,
a.name,
b.phone,
b.userid
FROM
ceshi_A a,
ceshi_B b
WHERE
a.userid = b.userid
) t
GROUP BY
t.userid,
t.NAME,
t.PHONE
最后的展示效果如下图
最后得到的是每个人员的公司项和职务项合并,其他项正常展示
wmsys.wm_concat ( t.COMPANY )此类函数与GROUP BY关键字是一起使用的,如此一来就可以通过其他字段分组,然后拼接指定要求的不同行同列字段