作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试运行 SQL 查询以获取四个随机项目。由于表 product_filter
在 product
中有多个元组,我必须在 SELECT
中使用 DISTINCT
,所以我得到这个错误:
对于 SELECT DISTINCT,ORDER BY 表达式必须出现在选择列表中
但如果我将 RANDOM()
放入我的 SELECT
中,它将避免 DISTINCT
结果。
有人知道如何将 DISTINCT
与 RANDOM()
函数一起使用吗?以下是我的问题查询。
SELECT DISTINCT
p.id,
p.title
FROM
product_filter pf
JOIN product p ON pf.cod_product = p.cod
JOIN filters f ON pf.cod_filter = f.cod
WHERE
p.visible = TRUE
LIMIT 4
ORDER BY RANDOM();
最佳答案
你要么做一个子查询
SELECT * FROM (
SELECT DISTINCT p.cod, p.title ... JOIN... WHERE
) ORDER BY RANDOM() LIMIT 4;
或者您尝试对这些相同的字段进行 GROUPing:
SELECT p.cod, p.title, MIN(RANDOM()) AS o FROM ... JOIN ...
WHERE ... GROUP BY p.cod, p.title ORDER BY o LIMIT 4;
这两个表达式中哪一个的计算速度更快取决于表结构和索引;通过对 cod 和 title 进行适当的索引,子查询版本将运行得更快(cod 和 title 将从索引基数信息中获取,并且 cod 是 JOIN 所需的唯一键,因此如果您按标题、cod 和可见索引(用于WHERE),很可能根本不会访问物理表。
我不太确定第二个表达式是否也会发生这种情况。
关于sql - 如何在 PostgreSQL 中使用带有 RANDOM() 函数的 SELECT DISTINCT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11401229/
我是一名优秀的程序员,十分优秀!