我一直在思考/谷歌搜索这个问题没有结果...... 我试图以部分方式枚举查询BUT的结果,即通过为每个新代码重置计数器。在这里和示例中,我还需要每个代码的部分总计数:
表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
除了代码的PARTIAL列计数器....我不知道如何生成....任何想法? 谢谢!
答案 0 :(得分:1)
您可以使用MySQL中的变量执行此操作。但是,您也可以使用标准SQL,使用相关子查询:
select a.*,
(select count(*)
from A a1
where a1.code = a.code and
a1.customer <= a.customer
) as Partial
from A
答案 1 :(得分: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 ║
╚══════╩══════════╩═══════╩═══════════╝