3

user次のようなテーブルがあります

user_id    name    gender    age
--------------------------------
1          AAA      Male      45
2          BBB      Female    22
3          CCC      Male      47
.................................
..............................

ユーザーの合計数と男性ユーザーの合計数、および男性と女性のユーザーの割合を取得したい

select count(*) as total , SUM(IF(v.gender = 'Male',1,0)) as totalMale ,
   SUM(IF(v.gender = 'Female',1,0)) as totalFemale , totalMale/total *100 ,
   totalFeMale/total *100 from user;

エイリアスを使用して男性と女性の割合を計算する場合、このクエリは機能しません。次のようなエラーが表示されます unknown columns..........

select count(*) as total , SUM(IF(v.gender = 'Male',1,0)) as totalMale ,
SUM(IF(v.gender = 'Female',1,0)) as totalFemale , SUM(IF(v.gender = 'Male',1,0))/count(*) *100 ,SUM(IF(v.gender = 'Female',1,0))/count(*) *100 from user;

しかし、これは機能しています。

しかし、これは私がSUM(IF(v.gender = 'Female',1,0))2回使用したもので、パフォーマンスが低下すると思います。

私の状況ではエイリアスを使用できませんか?

前もって感謝します...

4

2 に答える 2

1

あなたのクエリは問題ありません。選択レベルでエイリアスを使用することはできません。唯一のオプションは、派生テーブルを持つことですが、実際にはパフォーマンスが低下します。

クエリのパフォーマンスを向上させるための 1 つの方法は、Gender 列を単にブール値または char 列に変更することです。

ヒント: MySQL の null 以外のすべてのブール比較は 1 (真) と 0 (偽) に解決されるため、クエリを次のように単純化できます。

select
    count(*) total,
    SUM(gender = 'Male') totalMale,
    SUM(gender = 'Female') totalFemale,
    SUM(gender = 'Male') / count(*) * 100 percentageMale,
    SUM(gender = 'Female') / count(*) * 100 percentageFemale
from user
于 2013-10-03T04:52:59.260 に答える
0

このように内部クエリを追加します。

Select t1.total ,
t1.totalMale/total *100 ,
t1.totalFeMale/t1.total *100  
from 
(select 
count(user_id) as total , 
SUM(IF(v.gender = 'Male',1,0)) as totalMale ,
SUM(IF(v.gender = 'Female',1,0)) as totalFemale 
from user)t1;
于 2013-10-03T04:48:34.777 に答える