sql >> データベース >  >> RDS >> PostgreSQL

Railsを使用して、データベースに集計数を照会し、週ごとにグループ化するにはどうすればよいですか?

    points_by_week = Log.where(user_id: user_id).group("DATE_TRUNC('year', created_at)", "DATE_TRUNC('week', created_at)").sum(:points)
    

    のような結果が得られます
    {[2014, 4]=>3,
     [2014, 8]=>7,
     [2015, 4]=>26,
     [2015, 6]=>19,
     [2015, 12]=>50,
     [2015, 32]=>48,
     [2016, 2]=>78,
     [2016, 3]=>45,
     [2016, 4]=>49,
     [2016, 5]=>110,
     [2016, 45]=>30,
     [2017, 4]=>130,
     [2017, 11]=>185}
    

    キーが[年、週]の場合、Date.commercialを使用しての週を取得できます

    points_by_week.each do |(year, week), count|
      date = Date.commercial(year, week)
      puts "Week of #{date.strftime('%d/%m/%Y')} - #{count} total points"
    end
    

    そして(私ができる理由だけで)、クエリのmysqlバージョンは次のようになります

    points_by_week = Log.where(user_id: user_id).group("year(created_at)", "week(created_at)").sum(:points)
    

    これはデフォルトで、週が月曜日に始まり、年の最初の週がその年の最初の月曜日に始まることを前提としています



    1. テキストファイルからOracleのテーブルへのデータのロード

    2. utf8_unicode_ciとutf8_unicode_520_ciの違いは何ですか

    3. oracle sql (左括弧がありません

    4. グループ内のすべてのレコードがMySQLの特定の基準を満たしている場合にのみ、グループ化されたレコードを選択するにはどうすればよいですか?