0

これに関するスレッドを読みましたが、試してみるとうまくいきません。次のように、テーブルからすべての男性と女性を数えたいと思います。

Select 
count(case when substr(id,1, 1) in (1,2) then 1 else 0 end) as M, 
count(case when substr(id,1, 1) in (3,4) then 1 else 0 end) as F 
from users where activated=1

アイデアは、1 または 2 で始まる ID を持つユーザーが男性であるということです。
私のテーブルには 3 つの男性エントリがあり、2 つがアクティブ化されて返されます ( case ステートメントは機能しません) 。

M,F
2,2

任意の入力をいただければ幸いです

id    activated
123   1
234   0
154   1
4

3 に答える 3

2

COUNTそれらが何であれ、null以外の値の数を提供します。SUM代わりに試してください。

于 2012-10-12T08:14:22.220 に答える
1

Oracleのバージョンが10g以降の場合は、代わりにregexp_count関数を使用できます。ID列はデータ型であると想定しているため、この例では、関数を使用numberして明示的にデータ型に変換されています。列のデータ型がまたはの場合、データ型を変換する必要はありません。varchar2TO_CHARIDvarchar2char

次に例を示します。

SQL> create table M_F(id, activated) as(
  2    select 123,   1 from dual union all
  3    select 234,   0 from dual union all
  4    select 434,   1 from dual union all
  5    select 154,   1 from dual
  6  );

Table created

SQL> select sum(regexp_count(to_char(id), '^[12]')) as M
  2      ,  sum(regexp_count(to_char(id), '^[34]')) as F
  3    from M_F
  4   where activated = 1
  5  ;

         M          F
---------- ----------
         2          1

デモ

于 2012-10-12T09:09:50.270 に答える