当前位置: 首页 > 面试题库 >

如何在PostgreSQL中将SELECT DISTINCT与RANDOM()函数一起使用?

公良鸿光
2023-03-14
问题内容

我正在尝试运行SQL查询以获取四个随机项。由于表中product_filter有多个toupleproduct我必须使用DISTINCTin SELECT,所以出现此错误:

对于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 p.cod, p.title
FROM   product p
WHERE  p.visible
AND    EXISTS (
    SELECT 1
    FROM   product_filter pf
    JOIN   filters f ON f.cod = pf.cod_filter
    WHERE  pf.cod_product = p.cod
    )
ORDER  BY random()
LIMIT  4;

要点:

  • product结果中只有表格中的列,仅检查其他表中是否存在匹配的行。对于这种情况,EXISTS半联接可能是最快,最简单的解决方案。使用它不会在基表中相乘product,因此您无需使用再次删除它们DISTINCT。

*LIMIT必须排在最后ORDER BY。

*我将WHERE简化 p.visible = ‘t’为p.visible,因为这应该是一个布尔列。



 类似资料:
  • 我正在进行一个项目,在该项目中,我使用firebase函数中的express来运行使用手柄的服务器端渲染页面,一切都很正常,但当我使用firestore admin sdk时,我遇到以下错误: 我在函数/index.js文件中使用此代码 函数工作正常,但尝试const db=admin时。firestore()给了我一个错误。我还尝试了函数和firestore的模拟器,但仍然得到了相同的错误 请帮

  • 问题内容: 我需要在Netbeans 7.2的小型本地JavaDB中进行SQL调用,以从数据库中提取单个随机行。 到目前为止,我已经可以使用RANDOM()函数来工作了,但是我无法使LIMIT 1正常工作,它返回了语法错误。 我知道每个数据库都有不同的方法来执行此操作,而且我无法弄清楚它如何专门用于Netbeans中的JavaDB(我知道它可以在具有不同语法的单独Oracle DB中工作)。 是否

  • 假设我有对象:bob1,cob2。我想为类B和C建立一个析构函数,但我不确定如何销毁B.BB和C.CC以及如何访问它们。还有,有没有办法让我做到这一点,而不让类成为a类的朋友?

  • 在将我的Azure Functions项目迁移到.NET5之后,它已经开始在一个奇怪的包装类中包装我的响应。 例如,考虑以下endpoint: 之前,它会返回: 但现在,它又回来了: 我知道这一定是因为它只是尝试序列化对象结果,但我找不到任何文档说明这在.NET5中应该如何工作。 我的主要功能目前看起来是这样的: 我的项目位于这里,以防有人感兴趣:https://github.com/sponso

  • 问题内容: 我收到错误消息“无法加载驱动程序” 问题答案: 尝试这个: 通过删除“;”在php.ini中取消注释以下内容: 使用以下代码连接到PostgreSQL数据库服务器:

  • 问题内容: 我想确保数据库中是否存在临时表。 我尝试使用函数,但似乎无法将其用于临时表。 我该如何解决这个问题? 问题答案: 使用 在另一个数据库的上下文中运行时获取临时表的ID。