2011-03-28 25 views
1

データベースから情報をグループ化してカウントしようとしています。カウントとグループ化

私はこのデータを持っている:

column_a | column_b 
------------------- 
A  | 1 
A  | 2 
A  | 2 
B  | 3 
B  | 3 
A  | 3 
B  | 3 

Iはa_totalcolumn_aの値が一致する行の数をカウントする列を作成するためのデータを希望します。次に、種類Aのためにcolumn_b値をグループ化したいとします。データは、a_total降順で、次にcolumn_b降順で出力します。

私はこの出力たい:

column_a | column_b | a_total | b_total 
--------------------------------------- 
A  | 3  | 4  | 1 
A  | 2  | 4  | 2 
A  | 1  | 4  | 1 
B  | 3  | 3  | 3 

私がこれまで持っている何...

は、これまでのところ、私はSELECT column_a, column_b, COUNT(*) AS b_total FROM this_table GROUP BY column_a, column_b ORDER BY column_b DESC, b_total DESCを持って正しいb_totalで順番にcolumn_bを置きますが、私はcolumn_aの合計を同じクエリ内のa_totalに取得する方法も不明です。

助けがあれば助かります。/*問い合わせ*

+0

削除PHPタグは、PHPとは何の関係もありません。 –

答えて

2
CREATE DATABASE test; 
USE test; 
CREATE TABLE t (a VARCHAR(5), b INT); 
INSERT t VALUE ('A', 1),('A', 2),('A', 2),('B', 3),('B', 3),('A', 3),('B', 3); 

/

SELECT xx.a , xx.b , yy.a_total , zz.b_total 
FROM 
    (SELECT DISTINCT a, b FROM t) xx 
    INNER JOIN (SELECT COUNT(a) AS a_total, a FROM t GROUP BY a) yy 
    ON xx.a = yy.a 
    INNER JOIN (SELECT COUNT(a) AS b_total , a , b FROM t GROUP BY a, b) zz 
    ON (zz.a = xx.a AND zz.b = xx.b) 
関連する問題