2012-05-11 10 views
0

私は、データセットの男性と女性の割合を教えてもらうためにクエリを取得しようとしています。クエリは1つのテーブルからのみです。奇妙な動作を表示するローカル変数数学

declare @totalPop int; 
declare @totalmales int; 
declare @totalFemales int; 
declare @percentMales float; 
declare @percentFemales float; 
set @totalpop =(select count(*) from myTable) 
set @totalmales =(select count(*) from myTable where (sex='m')) 
set @totalfemales =(select count(*) from myTable where (sex='f')) 
set @[email protected]/totalPop 
set @percenFemales [email protected]/totalPop 

select sex, count(sex), @totalPop, @totalMales, @totalFemales 

私は現在、これは動作しませんことを知っているが、私はあなたがCASEにを使用することができ、次

+1

あなたが最後に疑問に思っているのは「SELECT」ですか? – JNK

+0

は正しいです。私はSQLに新しいので、クエリは私が残りの部分はOKだと思ったので実行しました:) – wootscootinboogie

+0

あなたはクエリから見えると思われる結果は何ですか? 「セックス」(最初の列)にはどのような価値がありますか?あなたは2行を期待しています、カウントは各行で繰り返されますか? – Glenn

答えて

1
SELECT 
    DISTINCT Sex, 
    @totalpop as 'TotalPopulation', 
    CASE Sex 
     WHEN 'm' THEN @TotalMales 
     WHEN 'f' then @TotalFemales 
     ELSE 'WTF?' END 
    as 'SexCount' 
    ... 
FROM 
    MYTable 

に1行にしてtotalFemalesによってtotalMalesによって分割する方法がわかりませんsexの値に応じて表示する番号を選択します。

+0

lol @ else wtf :)私は、論理式を使用してSQLのような変数をこのように定義できることを知りませんでした。気の利いたもの。 – wootscootinboogie

+0

これを実行しようとしたとき、以前と同じ問題が発生しました。クエリは実行されますが、@ percentMale/@ percentFemaleは0になります。 – wootscootinboogie

+0

ここで変数を定義していません。このように定義する場合は、必要なものを明確にする必要があります。 – JNK

1
CREATE TABLE myTable(id NUMBER, sex CHAR(1)); 

INSERT INTO myTable VALUES(1, 'm'); 
INSERT INTO myTable VALUES(2, 'm'); 
INSERT INTO myTable VALUES(3, 'f'); 
INSERT INTO myTable VALUES(4, 'f'); 
INSERT INTO myTable VALUES(5, 'f'); 

SELECT COUNT(DISTINCT sex) AS count_distinct_sex 
     ,COUNT(*) AS totalPop 
     ,SUM(CASE WHEN sex = 'm' THEN 1 ELSE 0 END) AS totalMales 
     ,SUM(CASE WHEN sex = 'f' THEN 1 ELSE 0 END) AS totalFemales 
    FROM myTable; 

COUNT_DISTINCT_SEX TOTALPOP TOTALMALES TOTALFEMALES 
------------------ -------- ---------- ------------ 
       2  5   2   3 
関連する問題