gpt4 book ai didi

mysql - 在嵌套选择中使用父查询的结果

转载 作者:行者123 更新时间:2023-11-29 07:16:01 25 4
gpt4 key购买 nike

我确定这是一个相当微不足道的问题,但我不确定要用 google 搜索什么才能找到解决方案。

我有一个看起来像这样的表:

CREATE TABLE IF NOT EXISTS `transactions` (
`name` text collate utf8_swedish_ci NOT NULL,
`value` decimal(65,2) NOT NULL,
`date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=COMPACT;

我通过从我的网上银行服务剪切和粘贴数据来填充它。值可以是负值或正值,日期和名称包含的内容应该很明显;)我构建了一个查询,让我查看每个月的底线:

SELECT sum(`value`) as 'change', DATE_FORMAT(`date`, '%M %Y') as 'month'
FROM `transactions`
WHERE 1
GROUP BY year(`date`), month(`date`)

现在我想在月底添加帐户中的总累积资金作为附加列。

SELECT sum(`value`) as 'change', DATE_FORMAT(`date`, '%M %Y') as 'month', 
(SELECT sum(`value`) FROM `transactions` WHERE `date` <= 123) as 'accumulated'
FROM `transactions`
WHERE 1
GROUP BY year(`date`), month(`date`)

123 不是我想要的,但我不明白如何从该子查询中的 DATE_FORMAT 获得结果。

这是解决问题的正确方法吗?

这主要是个人练习(在非常小的数据集上运行),所以我不是很关心性能,可读的 SQL 更为重要。

我在 MySQL 5.0.45 上运行 InnoDB 表

最佳答案

SELECT  change,
CONCAT(mymonth, ' ', myyear) AS 'month',
(
SELECT SUM(`value`)
FROM `transactions`
WHERE `date` < DATE_ADD(STR_TO_DATE(CONCAT('01.', mymonth, '.', myyear, '%D.%M.%Y'), INTERVAL 1 MONTH))
)
FROM (
SELECT sum(`value`) as 'change', YEAR(date) AS myyear, MONTH(date) AS mymonth
FROM `transactions`
WHERE 1
GROUP BY
YEAR(`date`), MONTH(`date`)
) q

你写道你不满足性能要求,但这种语法并不复杂但会更有效(以防万一):

SELECT  SUM(value) AS change,
CONCAT(MONTH(`date`), ' ', YEAR(`date`)) AS 'month',
@r : = @r + SUM(value) AS cumulative
FROM (
SELECT @r := 0
) AS vars,
transactions
WHERE 1
GROUP BY
YEAR(`date`), MONTH(`date`)
ORDER BY
YEAR(`date`), MONTH(`date`)

这个也会计算累积的 SUM,但它每个月只计算一次。

关于mysql - 在嵌套选择中使用父查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/915401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com