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

sql-値のない範囲を含めるために範囲内でグループ化

    このクエリを試してください( SQLFiddle でも試してください。 ):

    WITH ranges AS (
        SELECT (ten*10)::text||'-'||(ten*10+9)::text AS range,
               ten*10 AS r_min, ten*10+9 AS r_max
          FROM generate_series(0,9) AS t(ten))
    SELECT r.range, count(s.*)
      FROM ranges r
      LEFT JOIN scores s ON s.score BETWEEN r.r_min AND r.r_max
     GROUP BY r.range
     ORDER BY r.range;
    

    編集:

    パラメータをgenerate_series()に変更することで、範囲を簡単に調整できます。 。次の構成を使用して、rangesを確認することができます。 常にあなたのスコアをカバーします:

    SELECT (ten*10)::text||'-'||(ten*10+9)::text AS range,
           ten*10 AS r_min, ten*10+9 AS r_max
      FROM generate_series(0,(SELECT max(score)/10 FROM scores)) AS t(ten))
    

    rangesの場合 CTE。



    1. Rails:postgresでタイムゾーンを使用して時間列を作成する方法

    2. CONCAT_WS()がPostgreSQLでどのように機能するか

    3. Oracle-マテリアライズドビューの構造変更が非常に遅い

    4. 選択した行をPostgresのCSVファイルの値で更新するにはどうすればよいですか?