① sql 语句问题 分组查询
SELECT 部门 as '部门名称',count(姓名) as '人数',sum(isnull(工资,0)) as '工资总额
(select sum(isnull(工资,0)) from 工资表 where 部门=a.部门 and 职务='管理人员' and 工资年月='200908' and 工资 > 0) as 管理人员(select sum(isnull(工资,0)) from 工资表 where 部门=a.部门 and 职务='工人' and 工资年月='200908' and 工资 > 0) as 工人
FROM 工资表 as a where 工资年月='200908' and 工资 > 0group by 部门order by 部门
② SQL的GROUP BY错误
错误提示的意思是group部分定义条件过深.事实上在使用having条件时,一定要注意的是不要过多的使用聚合函数的.因为每一个聚合函数的计算都是非常大的,所以这里的错误就是你使用了过多的聚合函数的原因.
在SQL中存在一个叫子语句嵌套的.如:select * from A wrhere A.p in(select * from B where B.p in (select.........))看似这个条件可能无限的写下去,事实上由于这种查询非常的耗时的,所以在SQL中规定是子嵌套不能超出三层.其一般情况下我们采用的都其的处理方式的,避免使用这种子查询嵌套的,如果不得已才使用一个嵌套.因为这种查询太耗内存的!所以我们都是不建议使用的!
而聚合函数根其十分类似,因为其对所以结果进行一个分筛统计,也是非常耗时的,不建议使用聚合函数的嵌套的!所以这里必须要考虑这个的问题的!
对于你的问题,我可能理解的不太透彻,但我不明白的是为什么你非要条件压到having上呢?你有没有考虑过top 1这一个参数的使用呢?
Select top 1 sum(Admin_EnyEred) as maxenyered from state
group by year_entered
order by maxenyered Desc
这种条件中我连having条件都不再使用的!
使用多重聚合时我也不知道SQL是否让通过,你可以试一下的,但我想应该是有一定的问题的,至少效率也不行!
Select max(sum(Admin_EnyEred)) as maxenyered from state
group by year_entered
从你自己的语句中我看你可能是对having条件不太理解造成的,事实上having条件与where是不同的,很多时间也是无法转化的。只有部分条件是可以转化的,having又称分组依据,也就是分组前对分组进行一个“过滤”筛选的,而不是where条件的对结果集前后都可以筛选的,所以这样的having条件从你的使用上来说根本就是不对的!
③ sql 查询语句出错,各位帮忙看看
既然用了group by(typeid ),那么前面select出来的就只可以是typeid 以及像sum(typeid )这些关于typeid 的统计函数。
你这个可以这么写。
SELECT id, title, typeid, addtime
from news a,
(SELECT typeid
FROM news
WHERE typeid
IN ( 1, 2, 8, 23, 10, 22, 24, 25, 11, 21 )
GROUP BY typeid)b
where a.typeid = b.typeid
ORDER BY a.addtime DESC
④ 一个分组查询的SQL问题
select dataGrpcount(0),cntSum,sum(dataSign=0)cntSign0,sum(dataSign=1)cntSign1,sum(dataSign=2)cntSign2
⑤ SQL分组查询问题
select t1.branch_no, t1.cnt, t2.usercode, count(t2.usercode)
from (select branch_no, count(1) as cnt from table2 group by branch_no) t1
LEFT JOIN table2 t2 on t1.branch_no = t2.branch_no and t2.usercode is not null
group by t1.branch_no, t1.cnt, t2.usercode
order by t1.branch_no, t1.cnt, count(t2.usercode) desc
-------testing
BRANCH_NO CNT USERCODE COUNT
001 4 zhang san 2
001 4 li si 1
002 1 wang wu 1
⑥ sql 分组查询问题,
分组,使用Case When 语句将特定数据横向展开,具体语句如下
Select street,
1号点=Max(Case When Name='1号点' Then 经纬度 Else null End),
2号点=Max(Case When Name='2号点' Then 经纬度 Else null End),
3号点=Max(Case When Name='3号点' Then 经纬度 Else null End),
4号点=Max(Case When Name='4号点' Then 经纬度 Else null End),
5号点=Max(Case When Name='5号点' Then 经纬度 Else null End)
From yourTable Group By street