Öğe kayıtlarının bulunduğu bir Öğe tablosuna sahip olduğumu söyleyelim, Her öğe bir veya daha fazla kategoriye ait olabilir. Her kategoride bir veya daha fazla öğe vardırPostgreSQL: Sınırlama koşullarını karşılayan rastgele kayıtlar seç
A Kategorisinden 5 öğe, B Kategorisinden 3 öğe, Kategori C vb. 4 öğe gibi koşula uyan benzersiz öğenin rastgele bir listesini nasıl seçerim ve aynı zamanda A -> B -> C
kategorisinin sırasını koruyarak sorgu için sort_order ve kategori item_count'u başka bir tabloda saklanır.
Öğe tablosu oldukça büyüktür ~ 1 milyon satır, koşulu karşılayan öğeler oldukça büyük boşluklara sahip olabilir.
SELECT item_id FROM (
((SELECT t.category,t.item_id from items t where t.category ='A' order by random() limit 5)
UNION
(SELECT t.category,t.item_id from items t where t.category ='B' order by random() limit 3)
UNION
(SELECT t.category,t.item_id from items t where t.category ='C' order by random() limit 4))
ORDER BY category
ben hızlı olacağını söz veremem, ancak çalışması gerekir: