我是MySQL的新手。
我需要编写一个Stored过程,它返回多个结果集,我想从java中获取这些值。 例如。我有一个表交易。我需要一个根据类别返回收入的程序:
select category ||' : '||sum(amount)
from transaction
where inc_eXP='Inclome'
group by category;
和基于类别的支出:
select category ||' : '||sum(amount)
from transaction
where inc_eXP='Exp'
group by category;
或者我可以选择返回String数组。
请帮帮我。
答案 0 :(得分:0)
简单的concat
和group_concat
是否对您有所帮助?
select group_concat(sum_as_string SEPARATOR '**') as final_string from(
select concat(category, ":", sum(amount) ) as sum_as_string
from transaction
where inc_eXP='Inclome'
group by category
)as t;
这将导致cat1:12000 * cat2:34000 * cat3:89220。您可以使用用户集运算符。希望这有帮助
答案 1 :(得分:0)
使用条件聚合将收入和支出作为一个结果集返回
SELECT CONCAT(category, ' : ', SUM(CASE WHEN inc_exp = 'Income' THEN amount END)) income,
CONCAT(category, ' : ', SUM(CASE WHEN inc_exp = 'Exp' THEN amount END)) expenditure
FROM transaction
GROUP BY category;
示例输出:
| INCOME | EXPENDITURE | |----------------|----------------| | category1 : 25 | category1 : 5 | | category2 : 20 | category2 : 20 |
或恕我直言更清洁的方式没有将类别名称与值连接
SELECT category,
SUM(CASE WHEN inc_exp = 'Income' THEN amount END) income,
SUM(CASE WHEN inc_exp = 'Exp' THEN amount END) expenditure
FROM transaction
GROUP BY category;
示例输出:
| CATEGORY | INCOME | EXPENDITURE | |-----------|--------|-------------| | category1 | 25 | 5 | | category2 | 20 | 20 |
以下是两个查询的 SQLFiddle 演示