如何基于日期在MYSQL数据库中SUM,GROUP和SPLIT数据

时间:2012-09-26 15:39:27

标签: mysql sql

表:会计

date_due        date_paid         amount_due     amount_paid    category_type
2012-08-12      2012-08-12        500            450            Income
2012-08-13      2012-08-17        200            300            Expense
2012-09-15      2012-09-13        300            300            Income
2012-09-17      2012-09-16        100            100            Income

如何生成表格,如:

date_paid       IncomeAmountPaid               ExpenseAmountPaid
2012-08         TOTAL INCOME IN AUGUST         TOTAL EXPENSE IN AUGUST
2012-09         TOTAL INCOME IN SEPT.          TOTAL EXPENSE IN SEPTEMBER

3 个答案:

答案 0 :(得分:5)

您可以使用以下内容实现CASE语句和GROUP BY

select date_format(date_paid, '%Y-%m') date_paid,
  sum(case when category_type = 'Income' then amount_paid end) IncomePaid,
  sum(case when category_type = 'Expense' then amount_paid end) ExpensePaid
from accounting 
group by date_format(date_paid, '%Y-%m')

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

如何分组

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name 

如何汇总

SELECT SUM(column_name) FROM table_name

如何SPLIT

创建拆分功能

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

然后使用函数

SELECT SPLIT_STR(string, delimiter, position)

答案 2 :(得分:0)

你可以试试这个,

 select Year(date_paid), Month(date_paid),
  sum(case when category_type = 'Income' then amount_paid end) IncomeAmountPaid,
  sum(case when category_type = 'Expense' then amount_paid end) ExpenseAmountPaid
 group by Year(date_paid), Month(date_paid)