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

Zapytanie do ORDER BY liczba wierszy zwróconych z innego SELECT

Sposób, w jaki Postgres to zrobić:

SELECT *
FROM   users u
LEFT   JOIN (
   SELECT user_id, count(*) AS friends
   FROM   friends
   ) f USING (user_id)
ORDER  BY f.friends DESC NULLS LAST, user_id  -- as tiebreaker
  • Słowo kluczowe AS to tylko szum dla aliasów tabel. Ale nie pomijaj go w aliasach kolumn. Podręcznik „Pominięcie słowa kluczowego AS”:

    W FROM elementy, zarówno standardowe, jak i PostgreSQL pozwalają na AS być pominiętym przed aliasem, który jest niezastrzeżonym słowem kluczowym. Ale jest to niepraktyczne w przypadku nazw kolumn wyjściowych ze względu na niejasności składniowe .

    Pogrubiony nacisk na moje.

  • ISNULL() to niestandardowe rozszerzenie MySQL lub SQL Server. Postgres używa standardowej funkcji SQL COALESCE() . Ale ty też nie potrzebujesz tutaj. Użyj NULLS LAST zamiast tego, który jest szybszy i czystszy. Zobacz:

    • PostgreSQL sortuje według daty i godziny asc, najpierw null?
  • Wielu użytkowników będzie miało tę samą liczbę znajomych. Ci rówieśnicy byliby sortowani arbitralnie. Wielokrotne wykonanie może dać inny porządek sortowania, co zwykle nie jest pożądane. Dodaj więcej wyrażeń do ORDER BY jako rozstrzygający remisy. Ostatecznie klucz podstawowy rozwiązuje wszelkie pozostałe niejednoznaczności.

  • Jeśli dwie tabele mają tę samą nazwę kolumny user_id (tak jak powinny) możesz użyć skrótu składni USING w klauzuli łączenia. Kolejna standardowa funkcja SQL. Powitalny efekt uboczny:user_id jest wymieniony tylko raz w danych wyjściowych dla SELECT * , w przeciwieństwie do łączenia z ON . Wielu klientów nie zaakceptowałoby nawet zduplikowanych nazw kolumn w danych wyjściowych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja okna PostgreSQL:partycja przez porównanie

  2. dynamiczne zapytanie sql w postgresie

  3. Pula połączeń bazy danych pracownika selera

  4. Rails 3, ActiveRecord, PostgreSQL - polecenie .uniq nie działa?

  5. Prosta konfiguracja replikacji Slony-I.