Я использую (PostgreSQL) 11.8. И я столкнулся с этим запросом и задачей о сортировке продуктов по createdAt, price and numberOfEntries
для столбца таблицы владельцев (createdAt и price). У меня есть индекс, и мне нужно его использовать.
create index npdb_swedish_custom_index on products
using GIN(to_tsvector('pg_catalog.swedish', name||price||description||brand))
'CREATE INDEX IF NOT EXISTS created_desc_index ON products (created_at DESC NULLS LAST)'
'CREATE INDEX IF NOT EXISTS created_asc_index ON products (created_at ASC NULLS LAST)'
'CREATE INDEX IF NOT EXISTS price_desc_index ON products (price DESC NULLS LAST)'
'CREATE INDEX IF NOT EXISTS price_asc_index ON products (price ASC NULLS LAST)'
Определите проблему, которую я пытаюсь присоединиться к той же таблице, но я не нашел решения, потому что, когда я добавляю ORDER BY sp.price ASC
, я сталкиваюсь с
column "sp.price" must appear in the GROUP BY clause or be used in an aggregate function
мой запрос
SELECT
array_agg(DISTINCT main_products_alias.id) AS ids
FROM (
SELECT
products_alias.id,
products_alias.group_identity,
products_alias.price,
products_alias.extras,
products_alias.created_at AS "createdAt"
,COUNT(DISTINCT uip.id) as "numberOfEntries"
,ts_rank_cd(to_tsvector('pg_catalog.swedish', products_alias.name||products_alias.price||products_alias.description||products_alias.brand), to_tsquery('pg_catalog.swedish', 'Barnvagnar|Solskydd')) AS rank
FROM products products_alias
LEFT JOIN product_category cpt on cpt.product_id = products_alias.id
LEFT JOIN user_ip_product uip on uip.products_id = products_alias.id
WHERE to_tsvector('pg_catalog.swedish', products_alias.name||products_alias.price||products_alias.description||products_alias.brand) @@ to_tsquery('pg_catalog.swedish', 'Barnvagnar|Solskydd')
GROUP BY products_alias.id
) AS main_products_alias
LEFT JOIN products sp on sp.id = main_products_alias.id
GROUP BY main_products_alias.group_identity
ORDER BY sp.price ASC
Только подумайте, что я сделал, это добавить в основной выбор
(array_agg(DISTINCT main_products_alias.created_at))[1]::TIMESTAMP AS created_at_g,
, а затем ORDER BY created_at_g DESC
, но в этом случае мои индексы не используются: (
сделать что-нибудь для этого?