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

Jak vrátit ukázkový řádek z databáze jeden po druhém

order by bude vždy drahé, zvláště pokud výraz v pořadí podle není indexován. Takže neobjednávat. Místo toho proveďte náhodný offset v count() jako ve vašich dotazech, ale udělejte to všechno najednou.

with t as (
    select *
    from
        products p
        inner join
        images i using (productid)
    where
        prodtype = $sometype
)
select *
from t
offset floor(random() * (select count(*) from t))
limit 1

Tato verze může být rychlejší

with t as (
    select *, count(*) over() total
    from
        products p
        inner join
        images i using (productid)
    where
        prodtype = $sometype
)
select *
from t
offset floor(random() * (select total from t limit 1))
limit 1


  1. Je koncepčně správné udělat SELECT MAX(id) atd. pro nalezení posledního vloženého řádku?

  2. Dostupnost rezervace MySQL, překrývající se období

  3. Opakovaný pokus o objednávku stolu

  4. Jak vypsat databáze a tabulky v PostgreSQL pomocí psql