プロが教えるわが家の防犯対策術!

SQLで グループ毎にカウントした数でなくて割合を求めたいのです。

select name, count(*) from データベース名 group by name order by 2 desc;

とすると、以下のように200件あるデータで
グループ(名前)毎に個数が表示されますが、

田中 70
上村 120
橘川 10

下のように割合(パーセント)を求めるにはどのようにSQLを書けばよいのでしょうか?

田中 70 35%
上村 120 60%
橘川 10 5%

A 回答 (2件)

MySQL 4.1以降なら、インラインビューを使うと簡単です。



-- MySQL 4.1-
select name,cnt,cast(cnt/ttl*100 as signed) as pct
from
(select name,count(*) as cnt
from t0
group by name) as x,
(select count(*) as ttl
from t0) as y
;

MySQL 4.0までの場合は、1回のSQLでは結果を得られません。
temporary tableまたはユーザ変数を利用して、2回のSQLで得る必要があります。ユーザ変数を利用する例を示します。

-- MySQL -4.0
select count(*) into @ttl from t0;
select name,count(*),cast(count(*)/@ttl*100 as signed) as pct
from t0
group by name
;
    • good
    • 2

MySQLの質問をする場合は、バージョンを明記しましょう。


~4.0、4.1、5.0~で、大幅な機能拡張が行われています。

この回答への補足

返事がおそくなりました。
バージョンは4.0と5.0です。

補足日時:2007/09/11 21:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す