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 @percentMales=@totalMales/totalPop
set @percenFemales =@totalFemales/totalPop

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

現在これが機能しないことは知っていますが、ある行でtotalMalesで、次の行でtotalFemalesで除算する方法がわかりません。

4

2 に答える 2

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 
于 2012-05-11T20:59:07.113 に答える
1
SELECT 
   DISTINCT Sex,
   @totalpop as 'TotalPopulation',
   CASE Sex
        WHEN 'm' THEN @TotalMales
        WHEN 'f' then @TotalFemales
        ELSE 'WTF?' END
   as 'SexCount'
   ...
FROM 
   MYTable

を使用しCASEて、値に応じて表示する数値を選択できsexます。

于 2012-05-11T20:25:08.773 に答える