这是我的表:
id | integer | not null default nextval('frontend_prescription_id_seq'::regclass)
actual_cost | double precision | not null
chemical_id | character varying(9) | not null
practice_id | character varying(6) | not null
我想查询特定practice_id
的结果,然后按actual_cost
按日期和{{1>前两个字符加总{{1} }}。这在Postgres有可能吗?
换句话说,我希望输出看起来像这样:
chemical_id
这是我当前的查询,但它按整个processing_date | cost | chemical_id_substr
01-01-2010 1234 01
01-02-2010 4366 01
01-01-2010 3827 02
01-02-2010 8768 02
分组,而不是子字符串:
chemical_id
我不确定如何通过子字符串将其更改为分组,或者是否应该添加功能索引,或者是否应该对表格进行非规范化并添加新列。谢谢你的帮助。
答案 0 :(得分:4)
您可以这样做,但您还需要确保在选择列表中使用子字符串,而不是完整列:
SELECT SUM(actual_cost) as cost,
processing_date,
left(chemical_id,2) as id --<< use the same expression here as in the GROUP BY
FROM frontend_items
WHERE practice_id= %s
GROUP BY processing_date, left(chemical_id,2);