プロが教える店舗&オフィスのセキュリティ対策術

誕生日を取得するSQLとして以下の文を発行し、

-- 誕生日の並び替え(多い順)
select trunc((current_date - to_date(birth,'YYYY/MM/DD'))/365) as age, count(*) as cnt
from tb_custom_user where birth is not null
group by age order by cnt desc;

次の結果を得ました。
age | cnt
-----+-----
25 | 2
26 | 1
28 | 1
(3 rows)

cntが最大数のときのageだけを取得したい場合、
上記のSQLをどう変更すればいいのでしょうか?

A 回答 (2件)

こんにちは


頭の体操という感じで作ってみました.
もっとスマートなやり方があるのかも知れませんが...

select age, cnt from
(select trunc((current_date - to_date(birth,'YYYY/MM/DD'))/365.0) as age,
count(*) as cnt from tb_custom_user where birth is not null
group by age order by cnt desc) as cntsql
JOIN
(select max(cnt) as maxcnt from
(select trunc((current_date - to_date(birth,'YYYY/MM/DD'))/365.0) as age,
count(*) as cnt from tb_custom_user where birth is not null
group by age order by cnt desc) as cntsql
) as maxsql
ON cntsql.cnt = maxsql.maxcnt;

cntsql: wantedさんが作られたSQL
maxsql: 最大値を求めるSQL

これで,最大値の人が複数でもだいじょうぶです.
いかがでしょうか?
    • good
    • 0
この回答へのお礼

回答有難うございます。
すぐには、なかなか思いつかない方法ですね。

お礼日時:2004/08/16 10:45

以下のSQL文でどうでしょう?



上位1件が表示するようにwhere句に"rownum"を付け足しました。

selecttrunc((current_date - to_date(birth,'YYYY/MM/DD'))/365) as age,
count(*) as cnt
fromtb_custom_user
wherebirth is not null
rownum = 1
group by age
order by cnt desc;
    • good
    • 0
この回答へのお礼

そうでした。rownumがありました。
ありがとございます。

お礼日時:2004/08/16 10:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!