Skip to content
Advertisement

How to use SELECT DISTINCT with RANDOM() function in PostgreSQL?

I am trying to run a SQL query to get four random items. As the table product_filter has more than one touple in product i have to use DISTINCT in SELECT, so i get this error:

for SELECT DISTINCT, ORDER BY expressions must appear in select list

But if i put RANDOM() in my SELECT it will avoid the DISTINCT result.

Someone know how to use DISTINCT with the RANDOM() function? Below is my problematic query.

Advertisement

Answer

You can simplify your query to avoid the problem a priori:

Major points:

  • You have only columns from table product in the result, other tables are only checked for existence of a matching row. For a case like this the EXISTS semi-join is likely the fastest and simplest solution. Using it does not multiply rows from the base table product, so you don’t need to remove them again with DISTINCT.

  • LIMIT has to come last, after ORDER BY.

  • I simplified WHERE p.visible = 't' to p.visible, because this should be a boolean column.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement