gpt4 book ai didi

mysql - 在 MySQL Workbench 上按月运行 SQL 查询?

转载 作者:行者123 更新时间:2023-11-29 21:34:06 24 4
gpt4 key购买 nike

我目前正在使用 MySQL Workbench 开发 MySQL 数据库。

我的目标是从数据库中检索注册情况,以便在 Excel 电子表格上建立我公司的 KPI。

我编写了一些有效的 SQL 查询,但我想设置一个非常完整的查询,以避免使用 xxx 不同的查询。

要获得每个月的注册量(基于“created_at”),这使得工作:

SELECT year(u.created_at) year, monthname(u.created_at) month, COUNT(DISTINCT u.id) as 'New shoppers signups' 
FROM users u
GROUP BY year, month
ORDER BY u.created_at

但我还想每个月之前的注册总数

Jan : 12
Feb : 14 (12 + 2 new signups)
March : 22 (14 + 8 new signups)
...

我在哪里获得所有先前注册的总和

我在想这样的事情:

DECLARE @month = '2012-01-01' //startdate
WHILE @month < curdate()
BEGIN
SELECT count(distinct u.id)
WHERE u.created_at < @month
dateadd(month, 1, @month) // incrementing to next month
END

但是 while 循环、声明、设置或日期函数在 MySQL Workbench 上都不起作用。

我听说我必须申报程序,但我没有再成功......

我知道我可以使用 Excel 来获得结果,但我想改进我对 SQL 的使用,并使这成为一项非常清晰的工作。

最佳答案

您实际上已经接近答案了。获取您的结果并将其作为内部查询。这是使用 MySQL 变量累积每一行的外部查询的基础。

select
pq.yearAdded,
pq.monthAdded,
pq.NewShoppers as 'New shoppers signups',
@runBal := @runBal + pq.NewShoppers as TotalNewShoppers
from
( SELECT
year(u.created_at) yearAdded,
monthname(u.created_at) monthAdded,
COUNT(DISTINCT u.id) as NewShoppers
from
users u
GROUP BY
year(u.created_at),
monthname(u.created_at)
ORDER BY
year(u.created_at),
monthname(u.created_at) ) pq,
( select @runBal := 0 ) sqlvars

我只是建议列名称远离可能的保留字,例如年、月和其他标准 SQL 命令和函数名称...否则您通常需要在列名称周围添加刻度线

关于mysql - 在 MySQL Workbench 上按月运行 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35039193/

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