一个sql问题

zhangfengsummer 2009-11-23 12:15:30
现在有这样一张表,比如叫 suku

ID Bm Name Value1 Value2 RQ type
1 4110 地区1 11.0 13.8 2009-03-06 分类1
2 4111 地区2 211.9 19.3 2009-04-09 分类2
3 4115 地区3 56.8 25.6 2009-10-23 分类3
4 4117 地区4 12.3 78.9 2009-11-01 分类1
5 4110 地区1 15.1 66.6 2009-08-09 分类3
.
.

表中的bm和Name可以唯一确定一个分类,

现在想通过查询得到以下结果,如何做,要效率高一点。


(地区名称)Name (值)Value
分类1 最多
最少
平均值
分类2 最多
最少
平均值

即统计每个分类的最大最小值,以及这个最大最小值是对应哪个地区的?

求达人帮助,谢谢。
...全文
125 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿_布 2009-11-23
  • 打赏
  • 举报
回复

SELECT type,MAX(Value1) minv,MIN(Value1) maxv,AVG(Value1) avgv
FROM suku
GROUP BY Bm,Name
ORDER BY type;
starsong 2009-11-23
  • 打赏
  • 举报
回复
没有明白你value2用处是什么.
create table suku
(
id int not null,
bm varchar(10),
[name] varchar(10),
value1 decimal(12,1),
value2 decimal(12,1),
rq datetime,
[type] varchar(10)
)
insert into suku(id,
bm,
[name],
value1,
value2,
rq,
[type])
select 1,'4110','地区1',11.0,13.8,'2009-03-06','分类1'
union
select 2,'4111','地区2',211.9,19.3,'2009-04-09','分类2'
union
select 3,'4115','地区3',56.8,25.6,'2009-10-23','分类3'
union
select 4,'4117','地区4',12.3,78.9,'2009-11-01','分类1'
union
select 5,'4110','地区1',15.1,66.6,'2009-08-09','分类3'


SELECT type,MAX(Value1) minv,MIN(Value1) maxv
FROM suku
GROUP BY type
这样最简单的获取value1的最大最小
bayougeng 2009-11-23
  • 打赏
  • 举报
回复
楼主,你肯定得先goup by type把最大最小值找出来,然后用这个值作为条件再去连接这个表。
而且你求最大最小值的sql必须分开来写。
具体的,你没说清楚,写起来也费时间,我就只说说思路了。
starsong 2009-11-23
  • 打赏
  • 举报
回复
应该group by type,你value1和value2分别代表什么意思?
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
就是说 :
分类=分类1,valuename=value1,的最大值及最大值对应的地区
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
都要取。
starsong 2009-11-23
  • 打赏
  • 举报
回复
value1和value2取哪一个?
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
希望的结果应该是这样,再解释一下,平均值可以暂时不考虑

ID Bm Name Value1 Value2 RQ type
1 4110 地区1 11.0 13.8 2009-03-06 分类1
2 4111 地区2 211.9 19.3 2009-04-09 分类2
3 4115 地区3 56.8 25.6 2009-10-23 分类3
4 4117 地区4 12.3 78.9 2009-11-01 分类1
5 4110 地区1 15.1 66.6 2009-08-09 分类3
.
.

基于以上的数据,结果应该是这样的

Value1 Value2
Name Value Name Value
分类1 最多 地区4 12.3 地区4 78.9
最少 地区1 11.0 地区1 13.8
平均值

分类2 最多 地区2 211.9 地区2 19.3
最少 地区2 211.9 地区2 19.3
平均值

分类3 最多 地区3 56.8 地区1 66.6
最少 地区1 15.1 地区3 25.6
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
哦,最多最少这个可能设计的不太合理,应该这样更合理


Value1 Value2
(地区名称)Name (值)Value1 (地区名称)Name (值)Value2
分类1 最多 地区4 12.3 地区4 78.9
最少 地区1 11.0 地区2 13.8
平均值
分类2 最多 地区2 211.9 地区3 19.3
最少 地区2 211.9 地区4 19.3
平均值
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
希望的结果应该是这样,再解释一下


(地区名称)Name (值)Value1 (值)Value2
分类1 最多 地区4 12.3 78.9
最少 地区1 11.0 13.8
平均值
分类2 最多 地区2 211.9 19.3
最少 地区2 211.9 19.3
平均值


closewbq 2009-11-23
  • 打赏
  • 举报
回复
你的最多和最少指的是value1还是value2呀,还试value1+value2呀?
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
1楼的选不出来对应的最多的那一条记录的name值啦
长公子冰 2009-11-23
  • 打赏
  • 举报
回复
有点难度,关注。
panhaichun 2009-11-23
  • 打赏
  • 举报
回复
1楼的group by里面的 Bm 改成 type就行了
bayougeng 2009-11-23
  • 打赏
  • 举报
回复
1楼的,你看懂意思了么?
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
数据库无所谓哦。

oracle,mysql都可以啊。


问题补充:

刚才漏打了几个字


(地区名称)Name (值)Value1 (值)Value2
分类1 最多
最少
平均值
分类2 最多
最少
平均值


就是对每个value都这么计算统计
closewbq 2009-11-23
  • 打赏
  • 举报
回复
请问你是什么数据库,针对性的给你写。
zhangfengsummer 2009-11-23
  • 打赏
  • 举报
回复
楼上的貌似不行哦

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧