У меня есть схема таблицы, которая по сути представляет собой кучу информации о транзакции с полем datetime
TRANSACTION (< transactionid >, amount, when)
Мне нужно генерировать ежемесячную сумму транзакций, которая представляет собой СУММ (сумма), но я был в тупике от того, что я группирую. Каждая строка из SQL должна содержать месячную сумму (так что одна строка для 09 января, 09 февраля …. январь 2010 и т. Д.). Я думаю, что мне, возможно, придется генерировать таблицу по коду, но хотелось бы узнать, есть ли способ разрешить это с помощью SQL.
Любая помощь будет оценена! (Использование MySQL 5.3, PHP5)
Вам нужно сгруппировать по выдержкам.
SELECT SUM(amount) FROM transaction GROUP BY EXTRACT(MONTH FROM when), EXTRACT(YEAR FROM when)
И если вам нужны эти столбцы, тогда
SELECT EXTRACT(MONTH FROM when) as month, EXTRACT(YEAR FROM when) as year, SUM(amount) FROM transaction GROUP BY month, year
Конечно, вы можете добавить ORDER BY
и использовать короткие имена:
SELECT EXTRACT(MONTH FROM when) as month, EXTRACT(YEAR FROM when) as year, SUM(amount) FROM transaction GROUP BY month, year ORDER BY year DESC, month DESC
SELECT EXTRACT(YEAR_MONTH FROM when), sum(amount) FROM TRANSACTION GROUP BY EXTRACT(YEAR_MONTH FROM when)
Я всегда использовал MONTH () и YEAR () … который кажется мне немного похож на Hack, но он работает …
SELECT SUM(amount) FROM yourTable GROUP BY MONTH(date), YEAR(date)
Или это было наоборот? думает
Бобби
Я бы попробовал что-то вроде этого:
SELECT YEAR(when) AS year, MONTH(when) AS month, SUM(amount) AS amount FROM TRANSACTION GROUP BY YEAR(when), MONTH(when) ORDER BY YEAR(when), MONTH(when)
Это работает на MS SQL и также должно работать на MySQL.
Я думаю, вы хотите:
SELECT SUM(amount) FROM yourTable GROUP BY CONCAT(YEAR(date), '-', MONTH(date))