trade_data表
id符号行动价格百分比
1 1买3.4 50
2 1卖出3.8 25
3 2卖45 75
3 2买25.2 50
符号表
id name
1 RCC
2 REG
SELECT SUM(IF(trade_data.action =' BUY',price,0))AS' BUYSUM',SUM(IF(trade_data.action ='卖出&#) 39;,价格,0))AS' BUYSELL',AVG(trade_data.percent)AS peravg,symbol。 *
来自trade_data
INNER JOIN symbol
ON trade_data.symbol = symbol.id
此查询给了我一行但在此条件下有两行可用。 但是当我更改查询为
时SELECT trade_data.* , symbol. *
FROM `trade_data`
INNER JOIN `symbol` ON trade_data.symbol = symbol.id
然后这个查询给了我精确的2行。
答案 0 :(得分:1)
使用group by with aggregate function 离。
SELECT SUM( IF( trade_data.action = 'BUY', price, 0 ) ) AS 'BUYSUM', SUM( IF( trade_data.action = 'SELL', price, 0 ) ) AS 'BUYSELL', AVG( trade_data.percent ) AS peravg, symbol. *
FROM trade_data
INNER JOIN symbol
ON trade_data.symbol = symbol.id group by symbol.id
答案 1 :(得分:0)
SUM()
为您提供结果行中指定列的总和。所以在这里,SUM(价格)会给你总价,加上每一行的价格值。并且总数始终是单个值,因此您可以获得单行输出。
希望这会有所帮助。
答案 2 :(得分:0)
您正在使用AVG()
和SUM()
功能,这就是您获得单一依赖的原因
The AVG() Function
The AVG() function returns the average value of a numeric column.
The SUM() Function
The SUM() function returns the total sum of a numeric column.
如果您有多个trade_data.symbol = symbol.id
(超过1个ID),则可以使用GROUP BY
获取具有相似ID的每个记录的总和和平均值,因为您只有1个symbol.id
和trade_data.symbol
你只能获得一条记录。