0

我一直在思考/搜索这个问题但没有结果......我试图以部分方式枚举查询的结果,即通过为每个新代码重置计数器。这是示例,我还需要每个代码的部分总数:

表A:

CODE CUSTOMER
A     33
A     34
A     45
B     10
B     22
C     33

以下代码为我提供了部分结果:

SELECT A.code, A.customer, B.total FROM A
INNER JOIN (SELECT code, count(*) AS total FROM A GROUP BY code) AS B
WHERE A.code=B.code

CODE   CUSTOMER TOTAL  PARTIAL
A      33        3      1
A      34        3      2
A      45        3      3
B      10        2      1
B      22        2      2
C      33        1      1

除了代码的部分列计数器....我不知道如何生成....有什么想法吗?谢谢!

4

2 回答 2

1

您可以使用 MySQL 中的变量来执行此操作。但是,您也可以使用标准 SQL 执行此操作,使用相关子查询:

select a.*,
       (select count(*)
        from A a1
        where a1.code = a.code and
              a1.customer <= a.customer
       ) as Partial
from A
于 2013-05-30T13:35:28.927 回答
0

这是一个混乱的问题,因为 MySQL 不像任何其他 RDBMS 那样支持窗口函数。因此,一种方法是使用用户变量。

SELECT  code, customer, total, RowNumber -- final columns
FROM
        (
            SELECT  code,
                    customer,
                    total,
                    @sum := if(@cde = code, @sum ,0) + 1 RowNumber,
                    @cde := code
            FROM    
                    ( -- this part is your original query
                        SELECT  A.code, 
                                A.customer, 
                                B.total 
                        FROM    TableName a
                                INNER JOIN 
                                (
                                    SELECT  code, count(*) AS total 
                                    FROM    TableName 
                                    GROUP   BY code
                                ) AS B ON A.code = B.code
                    ) d,
                     -- declaring of user variables
                    (select @cde := '', @sum := 0) vars
            ORDER   BY  code, customer
        ) s

输出

╔══════╦══════════╦═══════╦═══════════╗
║ CODE ║ CUSTOMER ║ TOTAL ║ ROWNUMBER ║
╠══════╬══════════╬═══════╬═══════════╣
║ A    ║       33 ║     3 ║         1 ║
║ A    ║       34 ║     3 ║         2 ║
║ A    ║       45 ║     3 ║         3 ║
║ B    ║       10 ║     2 ║         1 ║
║ B    ║       22 ║     2 ║         2 ║
║ C    ║       33 ║     1 ║         1 ║
╚══════╩══════════╩═══════╩═══════════╝
于 2013-05-30T13:37:33.060 回答