2017-05-04 10 views
-1

現在の行数をCOUNT(*)で取得し、すべての行の合計行数をすべての行の列として取得したい(スクリプト作成を避けるために必要なレポートそれはSQLの外)。 SUM(qty)を使用することはできません。結果を理由別にグループ化したくない場合、およびパラメータを使用する場合は:=最後の行の合計qtyを取得するだけです。グループなしの同じ行の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は結果が

---------------------------- 
reason | qty | totalqty 
---------------------------- 
reason1 | 2 | 10 
reason2 | 3 | 10 
reason3 | 5 | 10 
---------------------------- 

のようになります私は多分間違った方向に考えています

---------------------- 
projectid | reason 
---------------------- 
1   | reason11 
1   | reason12 
2   | reason21 
2   | reason22 
2   | reason23 
3   | reason31 
. 
. 
. 
3   | reason35 
---------------------- 

のように見えるテーブルを探しますこれを簡単に修正する方法がありますか?

+1

誰もあなたが –

+0

@RaymondNijlandを必要とする結果といくつかの例のデータを共有していけない場合、あなたを助けることはできません - 、ヒント – 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 
    ) 

これにより、派生したサブクエリの表の間にデカルト積が生成されます。 2番目のサブクエリは、合計量の1行で構成されます。したがって、総量が最初のサブクエリに追加されます。

+0

実際に私はFROM用語を2回使用することを避けたいと思いました。研究によって何も起こらなかったので、これを行う唯一の方法だと思います。テンポラリテーブルを使用するより大きなクエリでは、それを少し明確にすることができます。ヘルプThx。 – Mayrhofer

関連する問題