2014-02-13 62 views
1

我通过信息化和固定ID选择数值:如何按列分组并返回其他列的SUM?

SELECT 
     infoid, 
     anchor, 
     value 
FROM 
     infodata 
WHERE 
     (infoid = 1) 
     OR (infoid = 2) 
     OR (infoid = 3) 
ORDER BY 
     anchor ASC 

该查询返回的INFOID,锚和数字的列表:

infoid  anchor  value 
------  -----  ----- 
1   10   500 
2   10   600 
3   10   700 

1   20   800 
2   20   900 
3   20   1000 

我如何通过群锚,并返回SUM( )3个信息的价值?返回是这样的:

anchor  value 
-----  ----- 
10   500+600+700 
20   800+900+1000 
+4

你已经回答了你自己的问题:)'SELECT a nchor,SUM(值)FROM infodata GROUP BY锚点' –

回答

6

您需要使用GROUP BY子句:

SELECT 
     anchor, 
     SUM(value) 
FROM 
     infodata 
WHERE 
     infoid IN (1,2,3) 
GROUP BY 
     anchor 
ORDER BY 
     anchor ASC 
+6

为什么不能'intoid IN(1,2,3)'? MySQL似乎很容易被'OR'弄糊涂,而且不会优化。 – tadman

+0

@tadman因为原来的问题有ORs :)它是等价的,但是IN(1,2,3)看起来更好 – fthiella

+0

+1。 。 。我几乎想回答'group_concat(value separator'+')';)。 –

0

如果你想要的是相同的结果,你用这个

SELECT 
    anchor, 
    group_CONCAT(value separator '+') value 
FROM infodata 
WHERE infoid in (1,2,3) 
GROUP BY anchor 
ORDER BY anchor ASC; 

结果:

anchor  value 
-----  ----- 
10   500+600+700 
20   800+900+1000 
相关问题