共一个表 TABLE1 ,用到的字段共4个。
month1(月份) code(公司) product(产品) NUM(产品的数量)
01 BJO GSM 1
01 BJO CDMA 1
01 BJO GSM 1
03 SHO GSM 0
03 SHO CDMA 1 要求列出形式如下:month1(月份) code(公司) product(产品) NUM(产品的数量)
01 BJO GSM 2
01 BJO CDMA 1
03 SHO GSM 0
03 SHO CDMA 1
请用一个sql写出来,也可以用functions,但是要求速度。
month1(月份) code(公司) product(产品) NUM(产品的数量)
01 BJO GSM 1
01 BJO CDMA 1
01 BJO GSM 1
03 SHO GSM 0
03 SHO CDMA 1 要求列出形式如下:month1(月份) code(公司) product(产品) NUM(产品的数量)
01 BJO GSM 2
01 BJO CDMA 1
03 SHO GSM 0
03 SHO CDMA 1
请用一个sql写出来,也可以用functions,但是要求速度。
解决方案 »
- 一个SQL的问题
- 删除和更新指定行,如limit(10,20)
- oracle stream不能同步多条数据改变?
- 如何查询某字段值在那个表
- oracle 9i数据库移到oracle 8i后的问题
- oracle 导出数据时,出现不懂的问题,帮忙哦
- 问一个sql建立表的主键的问题!着急!
- 日期型转换为整形数值
- 如何在oracle817中把sql server的数据库导入Oracle中?
- {100分}明明表DIC_MED_FIR_LEVELa存在,但 select * from DIC_MED_FIR_LEVELa老是出错“ERROR 位于第 1 行:ORA-00942: 表或视图不存在
- 数据库导入导出问题
- PL/SQL程序中如何获取另外一台主机的系统时间(非本地主机)?
group by month1,code,product;
直接用GROUP BY吧, 这个速度不在于SQL, 在于表的设计, 这个完全可以设计成两个表
表A:
(
ID PRIMARY KEY,
MONTH1,
CODE,
PRODUCT
)
其中(MONTH1,CODE,PRODUCT)作UNIQUE KEY表B:
(
KEY PRIMARY KEY,
NUM,
A_ID REFERENCE A(ID)
)
这样减少冗余后直接用:
SELECT A.*, B.NUM
FROM A, (SELECT SUM(NUM) NUM, A_ID FROM B GROUP BY A_ID) B
WHERE A.ID = B.A_ID
就可以了
也就是GROUP BY语句就能实现的东东。剩下的就是优化问题,比如创建索引、表分析、sort_area_size加大等。
group by month1, code, product;