2017-05-04 86 views
-1

我想獲得當前行數量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 
---------------------------- 

難道我也許錯了方向思考有一個簡單的方法來解決這個問題?

+1

沒有人可以幫助你,如果你不分享一些示例數據與你需要的結果 –

+0

@RaymondNijland-添加了預期的結果,thx的提示 – Mayrhofer

+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 
    ) 

這會在派生的子查詢表之間產生笛卡爾乘積。第二個子查詢將由總數量的單行組成。因此,總數量將被添加到第一個子查詢中。

+0

其實我想避免使用兩次的FROM項,我希望有一個更簡單的方法來做到這一點。因爲研究沒有提出任何其他事情,我猜這是做它的唯一方法。對於使用臨時表的更大查詢可能會使其更清晰一些。 Thx尋求幫助。 – Mayrhofer