2

年齢をグループ化したユーザーの数を取得するクエリを作成したい場合

毎年単独でカウントを取得するには:

select count(*) 
from tbl_user 
group by age 

たとえば、範囲内の年齢を取得できるように、カスタムグループを作成するにはどうすればよいですか...次の例のように:

group by ages as 0-18 , 19-25 , 26-...
4

4 に答える 4

5

サブクエリで式を使用CASEし、外側のクエリでその式でグループ化します。

select age_group, count(*) 
from (
  select case when age between  0 and 18 then '0-18'
              when age between 19 and 26 then '19-25'
              ...
              end as age_group
  from tbl_user
) t
group by age_group
于 2012-07-11T14:52:58.617 に答える
3

SUM1とCASEWHENはMSSQLServerで動作しますが、どのバージョンのSQLを使用していますか?

SELECT
    SUM(CASE WHEN Age >= 0 AND Age <= 18 THEN 1 ELSE 0 END) AS [0-18],
    SUM(CASE WHEN Age >= 19 AND Age <= 25 THEN 1 ELSE 0 END) AS [19-25]
FROM
    YourTable
于 2012-07-11T14:50:28.920 に答える
1

データは、コードではなくテーブルに属します。年齢カテゴリはデータです、IMHO。

CREATE TABLE one
        ( val SERIAL NOT NULL PRIMARY KEY
        , age INTEGER NOT NULL
        );
INSERT INTO one (age) SELECT generate_series(0,31, 1);

CREATE TABLE age_category
        ( low INTEGER NOT NULL PRIMARY KEY
        , high INTEGER NOT NULL
        , description varchar
        );
INSERT INTO age_category (low,high,description) VALUES
   ( 0,19, '0-18')
 , ( 19,26, '19-25')
 , ( 26,1111, '26-...')
        ;

SELECT ac.description, COUNT(*)
FROM one o
JOIN age_category ac ON o.age >= ac.low AND o.age < ac.high
GROUP BY ac.description
        ;
于 2012-07-11T15:05:20.370 に答える
1

CASE次のステートメントを使用できます。

SELECT Sum(CASE WHEN age BETWEEN 0 AND 18 THEN 1 ELSE 0 END) as [0-18],
Sum(CASE WHEN age BETWEEN 19 AND 25 THEN 1 ELSE 0 END) as [19-25],
Sum(CASE WHEN age BETWEEN 26 AND 34 THEN 1 ELSE 0 END) as [26-34]
FROM tbl_user

これにより、データが 1 行に「フラット化」されます。グループごとに 1 行を取得するには、これをビューの基礎として使用し、そこから選択します。

于 2012-07-11T14:53:47.687 に答える