好的,标题是模糊的,但我不知道如何更好地汉化它。
我有一系列昂贵的类似SELECT SUM查询,必须按顺序执行。
示例:
SELECT SUM(t2.Field)
FROM Table1 AS t1
INNER JOIN (
SELECT Field FROM Table2
WHERE [list of where]
) AS t2 ON ti.ExtKey = t2.Key
WHERE t1.TheValue = 'Orange'
SELECT SUM(t2.Field)
FROM Table1 AS t1
INNER JOIN (
SELECT Field FROM Table2
WHERE [list of where]
) AS t2 ON ti.ExtKey = t2.Key
WHERE t1.TheValue = 'Apple'诸若此类。我之所以使用嵌套的内连接,是因为在经过一些测试之后,它比普通连接更快。
为Table2选择的行始终相同,或者至少为session选择的行相同。有没有一种方法可以将所有的查询组合在一个查询中来加速执行?
我在考虑使用一个材料视图,但这会使设计和维护变得非常复杂。
发布于 2015-05-17 22:41:52
我不确定你的目标。我对你有个猜测:
http://sqlfiddle.com/#!9/af66e/2
http://sqlfiddle.com/#!9/af66e/1
SELECT
SUM(IF(t1.TheValue = 'Orange',t2.Field,0)) as oranges,
SUM(IF(t1.TheValue = 'Apple',t2.Field,0)) as apples
FROM Table1 AS t1
INNER JOIN (
SELECT Field, `key` FROM Table2
) AS t2 ON t1.ExtKey = t2.`key`
# GROUP BY t1.extkey uncomment if you need it如果你能提供原始数据样本和预期结果,这将会有很大帮助。
发布于 2015-05-17 23:24:33
我想你想要一台group by
SELECT t1.TheValue, SUM(t2.Field)
FROM Table1 t1 INNER JOIN
(SELECT Field
FROM Table2
WHERE [list of where]
) t2
ON t1.ExtKey = t2.Key
GROUP BY t1.theValue;注意,您的查询没有多大意义,因为t2没有一个名为key的列。我假设这是问题中的疏忽。
如果要将其限制为特定值,请在GROUP BY之前使用WHERE子句
WHERE t1.TheValue IN ('Apple', 'Orange', 'Pear')https://stackoverflow.com/questions/30287890
复制相似问题