我的桌子大概是:
id | category | link | caption | image
我的目标是从表中的每个不同类别中为表中的所有类别获取随机行。然后计划将每一行分配给相应类别的变量。
现在,我正在使用多个类似的SELECT语句:
SELECT link, caption, image FROM table WHERE category='whatever' ORDER BY RANDOM() LIMIT 1
但这似乎很不雅致,并且会导致向DB的访问次数增加,这很昂贵。
我很确定Postgres中的窗口函数可以做到这一点,但是我对它们没有任何经验,我也不完全确定如何使用一个函数来获得我想要的东西。
谢谢你的帮助!
尝试类似的方法:
SELECT DISTINCT ON (category) *
FROM table
ORDER BY category, random();
或具有窗口功能:
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY category ORDER BY random()) as rn
FROM table ) sub
WHERE rn = 1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句