MySql的值和总计(价值)在同一行中无组
问题描述:
我想获得当前行数量COUNT(*)和所有行上的总行数量作为每列的列(试图避免脚本的报告所需的它在sql之外)。 我不能使用SUM(数量),因为我不想按理由分组我的结果,当我使用一个参数:=我只得到最后一行的总数。MySql的值和总计(价值)在同一行中无组
我目前的查询看起来像
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
----------------------------
难道我也许错了方向思考有一个简单的方法来解决这个问题?
答
使用辅助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
)
这会在派生的子查询表之间产生笛卡尔乘积。第二个子查询将由总数量的单行组成。因此,总数量将被添加到第一个子查询中。
+0
其实我想避免使用两次的FROM项,我希望有一个更简单的方法来做到这一点。因为研究没有提出任何其他事情,我猜这是做它的唯一方法。对于使用临时表的更大查询可能会使其更清晰一些。 Thx寻求帮助。 – Mayrhofer
没有人可以帮助你,如果你不分享一些示例数据与你需要的结果 –
@RaymondNijland-添加了预期的结果,thx的提示 – Mayrhofer
你还应该发布源表或示例数据的标签 –