gpt4 book ai didi

sql - 如何在 PostgreSQL 中使用带有 RANDOM() 函数的 SELECT DISTINCT?

转载 作者:行者123 更新时间:2023-11-29 11:32:23 26 4
gpt4 key购买 nike

我正在尝试运行 SQL 查询以获取四个随机项目。由于表 product_filterproduct 中有多个元组,我必须在 SELECT 中使用 DISTINCT,所以我得到这个错误:

对于 SELECT DISTINCT,ORDER BY 表达式必须出现在选择列表中

但如果我将 RANDOM() 放入我的 SELECT 中,它将避免 DISTINCT 结果。

有人知道如何将 DISTINCTRANDOM() 函数一起使用吗?以下是我的问题查询。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com