我希望将当前行数量的COUNT(*)和所有行的总行数量作为每行的列(报告试图避免在sql之外编写脚本所需)。 我不能使用SUM(数量),因为我不想按原因对结果进行分组,当我使用参数时:=我只得到最后一行的总数量。
我当前的查询类似于
SET @sumTotal:=0;
SELECT reason, qty, (@sumTotal := @sumTotal + qty) AS total_qty
FROM
(
SELECT reason, COUNT(*) AS qty
FROM someTable
--Imagine a huge amount of joins here
GROUP BY someTableId
)base
表someTable看起来像
----------------------
projectid | reason
----------------------
1 | reason11
1 | reason12
2 | reason21
2 | reason22
2 | reason23
3 | reason31
.
.
.
3 | reason35
----------------------
结果应该类似于
----------------------------
reason | qty | totalqty
----------------------------
reason1 | 2 | 10
reason2 | 3 | 10
reason3 | 5 | 10
----------------------------
我是否可能在错误的方向思考并且有一种简单的方法可以解决这个问题?
答案 0 :(得分:1)
使用辅助SELECT查询来计算someTable
行的数量。
SELECT reason, qty, total_qty
FROM
(
SELECT reason, COUNT(*) AS qty
FROM someTable
GROUP BY someTableId
),
(
SELECT count(*) AS total_qty
FROM someTable
)
这会在派生的子查询表之间生成笛卡尔积。第二个子查询将包含总数量的单行。因此,总数量将添加到第一个子查询中。