Сумма в коррелированном подзапросе в MySQL - с использованием той же таблицы - PullRequest
0 голосов
/ 28 марта 2012

У меня есть таблица, в которой каждый месяц происходит несколько платежей в разные даты. Я хотел бы, чтобы запрос возвращал строку для каждого отдельного платежа и в этой же строке возвращал сумму всех платежей за этот месяц / год.

Моя структура таблицы:

   tbl_or_Distri
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `investment_id` int(11) NOT NULL,
  `inv_distri_id` int(11) NOT NULL,
  `trade_date` datetime NOT NULL,
  `pay_date` datetime NOT NULL,
  `amount` double NOT NULL,
  `perc_return` double NOT NULL,
   PRIMARY KEY (`id`),

Мой текущий внутренний запрос:

SELECT
 `investment_id`,
 SUM(`perc_return`) as perc_return,
 SUM(`capital_return`) as capital_return,
 SUM(amount) as TotalAmount, 
 CONCAT(MONTH(pay_date), " ", YEAR(pay_date)) as short_date,
 MONTH(pay_date) as pay_month,
 YEAR(pay_date) as pay_year
FROM `tbl_or_distri`
WHERE investment_id=29
GROUP BY YEAR(pay_date), MONTH(pay_date)

сумма (сумма), сумма (perc_return) и short_date - это 3 записи, которые мне нужно вернуть в каждой строке основного внешнего запроса. Внешний запрос:

SELECT
 `investment_id`,
  amount,
  pay_date
FROM `tbl_or_distri`
WHERE investment_id=29

Как я могу объединить эти два запроса в один? Поддерживая хорошую производительность? Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

Вам нужна сумма в каждой строке или вам просто нужна эта информация в том же запросе?Если последнее, то WITH ROLLUP может помочь вам

SELECT
  `id`, 
  CONCAT(MONTH(pay_date), " ", YEAR(pay_date)) as short_date,
  MONTH(pay_date) as pay_month,
  YEAR(pay_date) as pay_year,
  SUM(`perc_return`) as perc_return,
  SUM(`capital_return`) as capital_return,
  SUM(amount) as TotalAmount
FROM `tbl_or_distri`
WHERE investment_id=29
GROUP BY pay_year, pay_month WITH ROLLUP
0 голосов
/ 28 марта 2012

U может создать представление для вашего внутреннего запроса.

CREATE VIEW NameYourView AS
SELECT
 `investment_id`,
 SUM(`perc_return`) as perc_return,
 SUM(`capital_return`) as capital_return,
 SUM(amount) as TotalAmount, 
 CONCAT(MONTH(pay_date), " ", YEAR(pay_date)) as short_date,
 MONTH(pay_date) as pay_month,
 YEAR(pay_date) as pay_year
FROM `tbl_or_distri`
GROUP BY YEAR(pay_date), MONTH(pay_date)

И затем использовать представление в вашем внешнем запросе.

SELECT t.investment_id, t.amount, t.pay_date, v.*
FROM `tbl_or_distri` t
inner join NameYourView v on v.investment_id = t.investment_id
WHERE t.investment_id=29

Я не знаю, что он делаетпроизводительность, но это определенно будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...