4

私のウェブサイトにユーザー統計を表示し、次のような年齢層のパーセンテージを返したい:

-13 years : $percent %
13-15 years : $percent %
15-20 years : $percent %
23+ : $percent %

私のmysqlテーブルには、データタイム(yyyy-mm-dd)を返す列birth_dateがあります。

それを行うためのヒントやアイデアはありましたか?

4

4 に答える 4

4
select case when year(curdate() - birth_date) < 13 
            then '< 13 years'
            when year(curdate() - birth_date) between 13 and 14 
            then '13 - 14 years'
            when year(curdate() - birth_date) between 15 and 20 
            then '15 - 20 years'
            when year(curdate() - birth_date) >= 23 
            then '+23 years'
         end as `description`,
       (select count(*) from your_table) / count(*) 
from your_table
group by case when year(curdate() - birth_date) < 13 then 1
              when year(curdate() - birth_date) between 13 and 14 then 2
              when year(curdate() - birth_date) between 15 and 20 then 3
              when year(curdate() - birth_date) >= 23 then 4
         end
于 2013-04-19T10:24:42.367 に答える
3

純粋なSQLが必要な場合:

SELECT COUNT(*)    
FROM [table_name]
WHERE birth_date < DATE_ADD(NOW(),INTERVAL 13 YEAR)


WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 13 YEAR)
AND birth_date < DATE_ADD(NOW(),INTERVAL 15 YEAR)

--etc

それ以外の場合は、php を使用して日付を作成することをお勧めします。

すべてのクエリをまとめて作成し、SQL ビューを作成することができます。

CREATE VIEW statistics AS
SELECT "0-13" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date < DATE_ADD(NOW(),INTERVAL 13 YEAR)
UNION
SELECT "13-15" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 13 YEAR)
    AND birth_date < DATE_ADD(NOW(),INTERVAL 15 YEAR)
UNION
SELECT "15-20" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 15 YEAR)
    AND birth_date < DATE_ADD(NOW(),INTERVAL 20 YEAR)
UNION
SELECT "20-23" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 20 YEAR)
    AND birth_date < DATE_ADD(NOW(),INTERVAL 23 YEAR)
UNION
SELECT "23+" as age ,COUNT(*) as total
FROM table_name
WHERE birth_date >= DATE_ADD(NOW(),INTERVAL 23 YEAR)

次に、クエリを実行できます。

SELECT * from statistics
于 2013-04-19T10:23:20.657 に答える
0

datetime をタイムスタンプとして返​​し、now.offset(years=??) と比較し、配列に分類してからレコードをカウントします。

于 2013-04-19T10:22:53.963 に答える