[英]How to select several columns in Postgres without group by all columns
我正在使用Postgres 8.4.2,并且尝试进行查询以选择一些数据,但是按我选择的这几列分组时,我得到了错误的结果。
我尝试不对所有这些列进行分组,但是我注意到,我应该对所有选定的列进行分组。
我的查询如下所示:
SELECT c.id AS category_id, c.parent_id, c.title AS category_title, count(ofrs.id) AS offers_count
FROM categories c
LEFT JOIN offers_to_categories otc ON c.id = otc.category_id
LEFT JOIN offers ofrs ON otc.offer_id = ofrs.id
WHERE ofrs.offer_type = 1 AND ofrs.status = 1
GROUP BY c.id, c.title, c.parent_id;
我想选择按offer_type = 1类别分类的商品。
如果不按几列分组而仅按c.id
分组,我怎么办呢?
我尝试了以下窗口函数,但结果是相同的-它向我显示了比应有的结果更多的结果。
SELECT ofr.id , c.id AS category_id, c.parent_id, c.title AS category_title,ofr.website_id ,
count( ofr.id)
OVER (PARTITION BY (ofr.id) order BY ofr.id)
FROM offers AS ofr
INNER JOIN offers_to_categories AS ofr_cat ON (ofr_cat.offer_id = ofr.id)
INNER JOIN categories AS c ON (c.id = ofr_cat.category_id)
WHERE (c.id = 3 or c.parent_id = 3) and ofr.website_id = 1 and ofr.status = 1
我找到了我的问题的答案,它是:
SELECT distinct ON(ofr.id) ofr.id , c.id AS category_id, c.parent_id, c.title AS category_title,ofr.website_id ,
count( ofr.id)
OVER (PARTITION BY (select distinct on(ofr.id) ofr.id from offers as id GROUP BY ofr.id) order BY ofr.id)
FROM offers AS ofr
INNER JOIN offers_to_categories AS ofr_cat ON (ofr_cat.offer_id = ofr.id)
INNER JOIN categories AS c ON (c.id = ofr_cat.category_id)
WHERE (c.id = 3 or c.parent_id = 3) and ofr.website_id = 1 and ofr.status = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.