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

PostgreSQLクエリで個別のタプルを順序付ける方法

    左端のORDERBY アイテムはDISTINCTのアイテムと一致することはできません 句。 DISTINCT

    試してみてください:

    SELECT *
    FROM  (
        SELECT DISTINCT ON (c.cluster_id, feed_id) 
               c.cluster_id, num_docs, feed_id, url_time 
        FROM   url_info u
        JOIN   cluster_info c ON (c.cluster_id = u.cluster_id) 
        WHERE  feed_id IN (SELECT pot_seeder FROM potentials) 
        AND    num_docs > 5
        AND    url_time > '2012-04-16'
        ORDER  BY c.cluster_id, feed_id, num_docs, url_time
               -- first columns match DISTINCT
               -- the rest to pick certain values for dupes
               -- or did you want to pick random values for dupes?
        ) x
    ORDER  BY num_docs DESC;
    

    または、 GROUP BYを使用します :

    SELECT c.cluster_id
         , num_docs
         , feed_id
         , url_time 
    FROM   url_info u
    JOIN   cluster_info c ON (c.cluster_id = u.cluster_id) 
    WHERE  feed_id IN (SELECT pot_seeder FROM potentials) 
    AND    num_docs > 5
    AND    url_time > '2012-04-16'
    GROUP  BY c.cluster_id, feed_id 
    ORDER  BY num_docs DESC;
    

    c.cluster_id、feed_idの場合 SELECT に列を含めるすべての(この場合は両方の)テーブルの主キー列です。 リストの場合、これはPostgreSQL 9.1でのみ機能します またはそれ以降。

    それ以外の場合は、 GROUP BYする必要があります 残りの列または集計または詳細情報を提供します。




    1. PL/pgSQLを使用してPostgreSQLのレコードとして複数のフィールドを返します

    2. Python> JDBCを使用したOracleサービス名への接続(jaydebeapi)

    3. MySQLでNOTEQUAL値を取得するために複数のテーブルを結合する

    4. PostgreSQLでの低レベルのリソースプーリングに関するいくつかのアイデア