- ベストアンサー
PostgresのSQL文
誕生日を取得する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をどう変更すればいいのでしょうか?
- みんなの回答 (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 これで,最大値の人が複数でもだいじょうぶです. いかがでしょうか?
その他の回答 (1)
- NaNa777777
- ベストアンサー率25% (1/4)
以下のSQL文でどうでしょう? 上位1件が表示するようにwhere句に"rownum"を付け足しました。 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 rownum = 1 group by age order by cnt desc;
お礼
そうでした。rownumがありました。 ありがとございます。
お礼
回答有難うございます。 すぐには、なかなか思いつかない方法ですね。