首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用不同的条件求和相同的值

用不同的条件求和相同的值
EN

Stack Overflow用户
提问于 2015-05-17 22:29:25
回答 2查看 44关注 0票数 1

好的,标题是模糊的,但我不知道如何更好地汉化它。

我有一系列昂贵的类似SELECT SUM查询,必须按顺序执行。

示例:

代码语言:javascript
复制
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选择的行相同。有没有一种方法可以将所有的查询组合在一个查询中来加速执行?

我在考虑使用一个材料视图,但这会使设计和维护变得非常复杂。

EN

回答 2

Stack Overflow用户

发布于 2015-05-17 22:41:52

我不确定你的目标。我对你有个猜测:

http://sqlfiddle.com/#!9/af66e/2

http://sqlfiddle.com/#!9/af66e/1

代码语言:javascript
复制
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

如果你能提供原始数据样本和预期结果,这将会有很大帮助。

票数 3
EN

Stack Overflow用户

发布于 2015-05-17 23:24:33

我想你想要一台group by

代码语言:javascript
复制
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子句

代码语言:javascript
复制
WHERE t1.TheValue IN ('Apple', 'Orange', 'Pear')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30287890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档