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

集計関数で選択された行のIDを取得するにはどうすればよいですか?

    少なくとも3つの方法があります。以下を参照してください:

    CREATE TEMP TABLE test (
        id integer, name text, amount numeric, datefrom timestamptz
    );
    
    COPY test FROM STDIN (FORMAT csv);
    3,a,8,2018-01-01
    4,a,3,2018-01-15 10:00
    5,b,1,2018-02-20
    6,b,1,2019-01-01
    \.
    

    方法1.DISTINCTON(PostgreSQL固有)を使用

    SELECT DISTINCT ON (name)
      id, name, amount
    FROM test
    ORDER BY name, amount DESC, datefrom ASC;
    

    方法2.ウィンドウ関数の使用

    SELECT id, name, amount FROM (
      SELECT *, row_number() OVER (
        PARTITION BY name
        ORDER BY amount DESC, datefrom ASC) AS __rn
      FROM test) AS x
    WHERE x.__rn = 1;
    

    方法3.相互に関連するサブクエリを使用する

    SELECT id, name, amount FROM test
    WHERE id = (
      SELECT id FROM test AS t2
      WHERE t2.name = test.name
      ORDER BY amount DESC, datefrom ASC
      LIMIT 1
    ); 
    


    1. SQLのすべてのアクティビティを1つのIDに割り当てる必要がありますが、現在、各アクティビティには3つのIDがあります

    2. ストアドプロシージャのテーブルのリストを取得するにはどうすればよいですか?

    3. Mysql-パーセンテージによる制限?

    4. 非常に大規模なデータベースをアンロードする