现在有这样一张表,比如叫 sukuID 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 最多
最少
平均值即统计每个分类的最大最小值,以及这个最大最小值是对应哪个地区的?求达人帮助,谢谢。
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 最多
最少
平均值即统计每个分类的最大最小值,以及这个最大最小值是对应哪个地区的?求达人帮助,谢谢。
SELECT type,MAX(Value1) minv,MIN(Value1) maxv,AVG(Value1) avgv
FROM suku
GROUP BY Bm,Name
ORDER BY type;
问题补充: 刚才漏打了几个字
(地区名称)Name (值)Value1 (值)Value2
分类1 最多
最少
平均值
分类2 最多
最少
平均值
就是对每个value都这么计算统计
(地区名称)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
平均值
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
平均值
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
分类=分类1,valuename=value1,的最大值及最大值对应的地区
而且你求最大最小值的sql必须分开来写。
具体的,你没说清楚,写起来也费时间,我就只说说思路了。
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的最大最小