数据库进行SQL分组查询后再过滤

数据库表中有以下几个字段:
city_id
gathertime
ws_total
ws_succ
ws_other
para ,
ws_stat
type

先要根据city_id进行分组,分组完了之后根据type类型的不同,分别统计出type类型相同的sum(ws_succ)*100.00/sum(ws_stat)和sum(ws_stat) 的值。
之前自己写了 select (sum(ws_succ)*100.00/sum(ws_stat)) as yvalue,city_id as xvalue,sum(ws_stat) as ws_total from tab_open_success_ratio where ws_stat>0 group by city_id,type
明显不大对,也不知道怎么搞定
有大侠援助么

第1个回答  2013-10-17
你的表述我没看得太清, “根据type类型的不同” 统计是否忽略了city_id
最好 举个例子说明一下期望的算法

我根据你的表述,猜测你这里包含两层分组业务,
第一,根据city_id进行分组, 后用分组结果进行比较再次统计
如果你是10g或以上,可以试试以下语句
with grp1 as ( select sum(ws_succ)ssucc, sum(ws_stat) sstat ,city_id ,type
from tab_open_success_ratio
where ws_stat>0
group by city_id ,type)
select sum(ssucc)*100.00/sum(sstat),sum(sstat),type
from grp1
group by type
第2个回答  2013-10-16
这句sql除city_id后的逗号要用ascii的逗号外其它的没问题,它的意思就是按city_id与type组,然后每组中sum(ws_succ)*100.00/sum(ws_stat)和sum(ws_stat) 的值,这个含义不对?
第3个回答  2013-10-15
row_number() over() 这个函数我用的不多,不过我相信它应该可以解决你遇到的问题,至于效率嘛,我就不保证了,呵呵……

SELECT T.S_ws_succ*100.00/T.S_ws_stat as yvalue,T.city_id as xvalue,T.S_ws_stat as ws_total
(SELECT ROW_NUMBER() OVER(PARTITION BY city_id ORDER BY type) AS R_city_id,city_id,
ROW_NUMBER() OVER(PARTITION BY city_id,type ORDER BY ws_stat) AS R_type,type,
SUM(ws_stat) OVER(PARTITION BY city_id,type) AS S_ws_stat,ws_stat,
SUM(ws_succ) OVER(PARTITION BY city_id,type) AS S_ws_succ,ws_succ
from tab_open_success_ratio
where ws_stat>0) T
WHERE T.R_type=1

有问题欢迎提问,满意请采纳!
第4个回答  2013-10-15
select city_id,type,(sum(ws_succ)*100.00/sum(ws_stat)) as yvalue,sum(ws_stat) as ws_total
from tab_open_success_ratio where ws_stat>0 group by city_id,type 把无关的字段从select中剔除,不然无法group 求和

数据库进行SQL分组查询后再过滤
第一,根据city_id进行分组, 后用分组结果进行比较再次统计 如果你是10g或以上,可以试试以下语句 with grp1 as ( select sum(ws_succ)ssucc, sum(ws_stat) sstat ,city_id ,type from tab_open_success_ratio where ws_stat>0 group by city_id ,type)select sum(ssucc)*100.00\/sum(...

group by、where、having用法及顺序
1. where子句:非必须,但它针对的是每个单独的记录进行过滤。它的作用类似于在数据检索之前设定预选条件。2. group by子句:紧跟在where之后,对数据进行分组,通常用于聚合函数,如计数、求和等。这里的分组依据是select子句中除聚合函数外的其他列。3. having子句:在group by之后,对分组后的记录再次...

sql中having用法
在SQL中,HAVING子句主要用于对分组后的数据进行过滤,常与GROUP BY子句一起使用。其主要作用是筛选满足特定条件的分组结果。详细解释如下:1. HAVING子句的作用:当你在SQL查询中使用GROUP BY子句对数据进行分组后,如果想基于分组后的聚合结果进行筛选,就需要使用HAVING子句。它允许你指定条件,以筛选出满...

having count用法有哪些?
having count(*) 这个语法在SQL查询中用于分组后的过滤。当你想要根据某个字段进行分组后,统计每个组的数量,并筛选出数量大于特定值的组时,就可以使用having。例如,如代码所示:select id, count(*) from table_name group by id having count(*) > 2;这里的having就像一个后置的where条件,它...

「SQL 基础篇」分组查询
分组查询不仅支持单列分组,还可以处理 NULL 值,NULL 会被视为一个单独的分组。此外,SQL 还允许我们通过 HAVING 子句过滤分组,比如只显示供应产品数目超过 2 种的供应商,如下:SELECT vend_id, COUNT(*) FROM products GROUP BY vend_id HAVING COUNT(*) > 2;需要注意的是,HAVING 用于在分组...

sql中grouping的作用是什么
在复杂的查询中,我们经常会将Grouping与WHERE子句结合使用。通过WHERE子句,我们可以对结果进行过滤,然后再对过滤后的数据进行分组。这样,我们可以更容易地得到我们想要的结果。例如,我们可以先过滤出销售额超过某个值的记录,然后再根据部门对这些记录进行分组。总的来说,SQL中的Grouping功能允许我们更...

「SQL 基础篇」分组查询
过滤分组后的查询结果:与前面的结果相比,供应产品数量等于 2 的供应商信息已被 HAVING 过滤掉。提示:“WHERE 过滤行,HAVING 过滤分组”也就是说 WHERE 在分组前进行过滤,HAVING 在分组后进行过滤。下面的 SQL 检索具有两个或以上产品且其价格大于等于 4 的供应商。查询结果:三. SELECT 子句顺序 ...

sql查询语句,怎样查询重复数据
3. 使用HAVING子句过滤结果: 在分组后,如果想要进一步过滤结果,可以使用HAVING子句。结合COUNT或其他聚合函数,可以找出那些记录数超过特定阈值的组,进而确定重复的数据。4. 具体的SQL查询语句示例: 假设有一个名为"students"的表,其中包含"name"和"address"列,想要查找重复的名字,可以使用如下查询...

运用SQL对数据进行聚合与分组排序
筛选后的洞察HAVING子句则是分组后的过滤器,允许你在分组数据后添加条件,调整你的分析视角。其语法格式:HAVING condition。现在,让我们添加条件,对分组结果进行深入探索。实战应用以下是SQL查询的实用示例,每个练习都展示了一种关键技能:找出平均成绩高于60分的学生学号和对应成绩:SELECT student_id, ...

sql语句执行顺序?
正确理解SQL语句的执行顺序有助于更高效地编写和优化SQL查询,特别是在处理复杂的查询和数据统计时。在理解这个执行顺序时,应注意FROM和WHERE是查询的起点,这两个子句的设定直接关系到后续处理的效率和准确性。随着处理的深入,GROUP BY进行分组、HAVING过滤分组结果、SELECT提取信息并最终由ORDER BY进行排序...

相似回答