小编典典

使用count(*)的mysql用户变量分配

sql

我尝试使用用户变量进行查询,但是我不明白为什么,我无法在查询中更新变量。我想总结每天的分组结果以制作图表。真的很简单。

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

这就是为什么我使用变量。在查询上使用起来更简单。但是这次,我不明白。

非常感谢。


阅读 321

收藏
2021-04-15

共1个答案

小编典典

正如@JagaSrik所说,有必要提供有关您的数据和表的更多信息以给出正确的答案。但是,如果您需要像这样更改表:

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 是完成工作的一种方法,并且可能会有更有效的方法。

2021-04-15