mysql 带计数的用户变量赋值(*)
mysql user variable assignement with count(*)
我尝试使用用户变量进行查询,但我不明白为什么,我无法更新查询中的变量。我想总结每天的分组结果来做一个图表。就这么简单。
SET @total := 0;
SELECT
"total Register",
li.registerDate,
@total := COUNT(*) + @total as registerNumber,
@total
FROM calendar c3
INNER JOIN (
SELECT
c2.ide_calendar as ide_calendar,
c2.name,
DATE_FORMAT(i.date_creation, "%Y-%m-%d") as registerDate
FROM calendrar c2
LEFT JOIN inscription i ON i.ide_calendrar = c2.id
) li ON li.ide_calendrar = c3.id
WHERE c3.id = 9291
GROUP BY registerDate
真是奇怪。我正在查看 mysql 文档,但没有任何效果。
编辑:
我想要一些统计数据来了解每天的注册总数。
Day 1 : 2 register then total = 2
Day 2 : 1 register then total = 3.
我以前用过,没有问题。
编辑 2:
查询实际数据结果示例
total Inscription | 2017-07-10 | 2
total Inscription | 2020-04-20 | 2
total Inscription | 2020-04-21 | 3
total Inscription | 2020-06-17 | 4
total Inscription | 2020-06-18 | 2
我想要的是:
total Inscription | 2017-07-10 | 2
total Inscription | 2020-04-20 | 4
total Inscription | 2020-04-21 | 7
total Inscription | 2020-06-17 | 11
total Inscription | 2020-06-18 | 13
这就是我使用变量的原因。
在查询中使用更简单。
但是这次,我不明白了。
非常感谢。
正如@JagaSrik 所说,需要有关您的数据和 table 的更多信息才能给出正确答案。
但是,如果您需要像这样更改 table:
name | date | id
-----------------------------------------
total Inscription | 2017-07-10 | 2
total Inscription | 2020-04-20 | 2
total Inscription | 2020-04-21 | 3
total Inscription | 2020-06-17 | 4
total Inscription | 2020-06-18 | 2
像这样:
date | total
-----------------------------------------
2017-07-10 | 2
2020-04-20 | 4
2020-04-21 | 7
2020-06-17 | 11
2020-06-18 | 13
您可以使用 CURSOR.
对于这个例子:
DELIMITER $$
CREATE PROCEDURE `countIds`()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE total INTEGER DEFAULT 0;
DECLARE theCount INTEGER DEFAULT 0;
DECLARE theDate varchar(100) DEFAULT "";
DEClARE curCount
CURSOR FOR
SELECT `id`,`date` FROM table1;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN curCount;
getCount: LOOP
FETCH curCount INTO theCcount,theDate;
IF finished = 1 THEN
LEAVE getCount;
END IF;
SET total = total + theCount;
select theDate, total;
END LOOP getCount;
CLOSE curCount;
END$$
DELIMITER ;
尽管如此,CURSOR 是您工作的一种方式,可能还有更有效的方法。
我尝试使用用户变量进行查询,但我不明白为什么,我无法更新查询中的变量。我想总结每天的分组结果来做一个图表。就这么简单。
SET @total := 0;
SELECT
"total Register",
li.registerDate,
@total := COUNT(*) + @total as registerNumber,
@total
FROM calendar c3
INNER JOIN (
SELECT
c2.ide_calendar as ide_calendar,
c2.name,
DATE_FORMAT(i.date_creation, "%Y-%m-%d") as registerDate
FROM calendrar c2
LEFT JOIN inscription i ON i.ide_calendrar = c2.id
) li ON li.ide_calendrar = c3.id
WHERE c3.id = 9291
GROUP BY registerDate
真是奇怪。我正在查看 mysql 文档,但没有任何效果。
编辑: 我想要一些统计数据来了解每天的注册总数。
Day 1 : 2 register then total = 2
Day 2 : 1 register then total = 3.
我以前用过,没有问题。
编辑 2: 查询实际数据结果示例
total Inscription | 2017-07-10 | 2
total Inscription | 2020-04-20 | 2
total Inscription | 2020-04-21 | 3
total Inscription | 2020-06-17 | 4
total Inscription | 2020-06-18 | 2
我想要的是:
total Inscription | 2017-07-10 | 2
total Inscription | 2020-04-20 | 4
total Inscription | 2020-04-21 | 7
total Inscription | 2020-06-17 | 11
total Inscription | 2020-06-18 | 13
这就是我使用变量的原因。 在查询中使用更简单。 但是这次,我不明白了。
非常感谢。
正如@JagaSrik 所说,需要有关您的数据和 table 的更多信息才能给出正确答案。 但是,如果您需要像这样更改 table:
name | date | id
-----------------------------------------
total Inscription | 2017-07-10 | 2
total Inscription | 2020-04-20 | 2
total Inscription | 2020-04-21 | 3
total Inscription | 2020-06-17 | 4
total Inscription | 2020-06-18 | 2
像这样:
date | total
-----------------------------------------
2017-07-10 | 2
2020-04-20 | 4
2020-04-21 | 7
2020-06-17 | 11
2020-06-18 | 13
您可以使用 CURSOR.
对于这个例子:
DELIMITER $$
CREATE PROCEDURE `countIds`()
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE total INTEGER DEFAULT 0;
DECLARE theCount INTEGER DEFAULT 0;
DECLARE theDate varchar(100) DEFAULT "";
DEClARE curCount
CURSOR FOR
SELECT `id`,`date` FROM table1;
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN curCount;
getCount: LOOP
FETCH curCount INTO theCcount,theDate;
IF finished = 1 THEN
LEAVE getCount;
END IF;
SET total = total + theCount;
select theDate, total;
END LOOP getCount;
CLOSE curCount;
END$$
DELIMITER ;
尽管如此,CURSOR 是您工作的一种方式,可能还有更有效的方法。