PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak połączyć tylko jeden rząd w łączonym stole z postgresem?

select distinct on (author.id)
    book.id, author.id, author.name, book.title as last_book
from
    author
    inner join
    book on book.author_id = author.id
order by author.id, book.id desc

Sprawdź distinct on

W przypadku opcji differ na konieczne jest uwzględnienie "odrębnych" kolumn w order by . Jeśli nie jest to kolejność, którą chcesz, musisz zawinąć zapytanie i zmienić kolejność

select 
    *
from (
    select distinct on (author.id)
        book.id, author.id, author.name, book.title as last_book
    from
        author
        inner join
        book on book.author_id = author.id
    order by author.id, book.id desc
) authors_with_first_book
order by authors_with_first_book.name

Innym rozwiązaniem jest użycie funkcji okna, jak w odpowiedzi Lennarta. Innym bardzo ogólnym jest to

select 
    book.id, author.id, author.name, book.title as last_book
from
    book
    inner join
    (
        select author.id as author_id, max(book.id) as book_id
        from
            author
            inner join
            book on author.id = book.author_id
        group by author.id
    ) s
    on s.book_id = book.id
    inner join
    author on book.author_id = author.id


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić listę typów niestandardowych za pomocą Postgres information_schema?

  2. PostqreSQL w Railsach:Jak sprawić, by serwer działał lokalnie ORAZ akceptował połączenia w gnieździe domeny uniksowej?

  3. Jak dodać certyfikat SSL (ca-cert) do zmiennych środowiskowych node.js, aby połączyć się z bazą danych Digital Ocean Postgres Managed Database?

  4. PG::Error - przepełnienie pola numerycznego w Heroku

  5. psycopg2 cursor.execute() z parametrem zapytania SQL powoduje błąd składni