【发布时间】:2014-06-17 00:13:05
【问题描述】:
我有一个包含许多人的数据库。每个人都有四分之一的观察结果
`
+----+---------+--------+--------+
| az | quarter | imp |year
+----+---------+--------+--------+
| 1 | 1.2012 | 6 | 2012 |
| 1 | 2.2012 | 5 | 2012 |
| 1 | 3.2012 | 5 | 2012 |
| 1 | 4.2012 | 5 | 2012 |
| 2 | 1.2012 | 3 | 2012 |
| 2 | 2.2012 | 3 | 2012 |
| 2 | 3.2012 | 4 | 2012 |
| 2 | 4.2012 | 3 | 2012 |
|....| .... | |
+----+---------+--------+-------+
`
我需要创建一个包含每年季度总和的列
+----+---------+--------+--------+
| az | year | imp |imp.year
+----+---------+--------+--------+
| 1 | 2012 | 6 | 21
| 1 | 2012 | 5 | 21
| 1 | 2012 | 5 | 21
| 1 | 2012 | 5 | 21
| 2 | 2012 | 3 | 13
| 2 | 2012 | 3 | 13
| 2 | 2012 | 4 | 13
| 2 | 2012 | 3 | 13
|....| .... | |
+----+---------+--------+-------+
我用过
CREATE TABLE IMP_TOT_YEAR AS SELECT
az, year, SUM(imp) as imp.year,
FROM IMP_TOT
GROUP BY az,year;
然后
CREATE TABLE complete AS SELECT
a.*, b.imp.year,
FROM IMP_TOT as a
left join IMP_TOT_YEAR as b
on a.az=b.az and a.anno=b.year ;
我有超过 10 个变量,比如 imp 和很多年,所以加入太慢了。 它的运行时间超过 2 小时。 我正在寻找一种没有加入的方法,例如:
if quarter=1.2012 then imp.year = imp in (actual_row+1)+imp in (actual_row+2)+imp in (actual_row+3)
else imp.year = imp.year in (actual_row -1)
所以我不需要执行子查询或加入。有可能吗?
【问题讨论】:
-
为什么要在季度栏中重复年份?
-
你的桌子有多大?
-
您的桌子上有哪些索引?如果您在
(az, year)上有索引,则GROUP BY应该很快。
标签: mysql join group-by mysql-workbench