sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL:Iterujte řádky tabulek pomocí cyklu for, načtěte hodnotu sloupce na základě aktuálního řádku

Nepotřebujete k tomu smyčku nebo dokonce funkci.

To, co chcete udělat, lze provést v jediném příkazu aktualizace, protože celkový počet na území lze vypočítat pomocí jediné agregace:

SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid

To pak lze použít jako zdroj pro aktualizaci tabulky území:

UPDATE territory2_t
   SET total_sales_person = t.total_count
FROM (
   SELECT salesterritoryid, count(*) as total_count
   FROM salesperson_t
   group by salesterritoryid
) t 
WHERE territoryid = t.salesterritoryid;

Alternativou, která může být srozumitelnější, ale u větších tabulek bude pomalejší, je aktualizace se souvisejícím dílčím dotazem

UPDATE territory2_t tg
   SET total_sales_person = (select count(*) 
                             from salesperson_t sp
                             where sp.salesterritoryid = tg.territoryid);

Mezi první a druhou aktualizací je malý rozdíl:druhá aktualizuje total_sales_person na 0 (nula) pro ta území, kde není žádný prodejce. První z nich aktualizuje počet pouze pro území, která jsou skutečně přítomna v tabulce prodejců.




  1. Odebrat odsazení při odesílání výsledků dotazu v e-mailu ze serveru SQL (T-SQL)

  2. Určete maximální povolenou délku ve sloupci v mysql

  3. Jak vložit data Excel nebo CSV do tabulky pomocí grafického uživatelského rozhraní v SQL Server - SQL Server / Výukový program TSQL, část 102

  4. Jak volat uloženou proceduru s Eloquent (Laravel)?