十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
按照你的说法,我的理解的如果不放group by那么可能出现两行完全重复的数据,是这个意思吧。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于做网站、成都网站建设、通化网络推广、成都微信小程序、通化网络营销、通化企业策划、通化品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供通化建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
不能放day,因为day是在这个sql中起的一个别名,只有在查询完成后day才有效果(比如在having中们就可以用),但是在group by中查询并没有完成,所以day没有用。
这个有一个办法,就是你把day前面的那一串(也就是别名day表示的那串round函数中的内容)整个放在groupby的后面。
还有一个办法不一定好用(这个方法有个前提,就是每个分组的最后day结果只有一个,而不是可能有好几个),你可以在round前面加一个max或者min,这样就是聚合函数了(也就是说不需要在groupby后面加day的那一串了),如果完全相同,那么可能只显示一个(可能,我忘了如果存在相等的最大值时,是怎么样的一个结果了,你可以试试),这样就不需要大改动,就能完成了、
创建测试表
create table test
(id int,
month int,
dept_id varchar2(10),
counts int,--由于你给的字段名是关键字,这里我稍作修改
al int);--这个字段同上
insert into test values (1,1,'市北',20,100);
insert into test values (2,1,'市南',30,100);
insert into test values (3,2,'市北',30,100);
insert into test values (4,2,'市南',40,100);
insert into test values (5,3,'市北',50,100);
insert into test values (6,3,'市南',60,100);
sql语句
select t.month,
max(decode(t.dept_id,'市北',t.persent,0)) 市北,
max(decode(t.dept_id,'市南',t.persent,0)) 市南
from
(select month,dept_id,(counts/al)*100||'%' persent from test) t
group by t.month
结果截图
看你的意思
大概这样理解
数据库表里面有编号为1和编号为2的
男女若干个
现在要分别统计
编号为1的男有多少个
女有多少个
编号为2的
男有多少个
女有多少个;如果是这样的话,首先先按编号分组
select
*
from
student
group
by
id;
然后再这个基础上要分别统计男和女
可以用到oracle特有的decode函数
select
sum(decode(sex,'男',1,0))
男
from
student
这样就得到了男
以此类推
整个sql语句
可以这样写
select
id
编号,sum(decode(sex,'男',1,0))
男,sum(decode(sex,'女',1,0))
女
from
student
group
by
id;