group by 语句期间行值之间的数学运算
math operations between row values during group by statement
在这个 中,我试图按照目前的方式对我的产品进行分组。
现在我尝试将我查询的所有产品与所有已售产品的总和以及每种情况下的平均价格分组,结果如下:
这是我的查询:
select
missions_answer.response_id as Response,
crm_player."document" as Document,
MAX(missions_answerselectmultiple.body::json ->> 'name') FILTER (WHERE missions_question.label = 'Producto') as Product,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Cantidad unidades vendidas') as Amount,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Valor Unidad') as Price
from missions_answer
left join missions_question on missions_answer.question_id = missions_question.id
left join missions_answertext on missions_answer.id = missions_answertext.answer_ptr_id
left join missions_answerselectmultiple on missions_answer.id = missions_answerselectmultiple.answer_ptr_id
left join missions_answerinteger on missions_answer.id = missions_answerinteger.answer_ptr_id
left join missions_response on missions_answer.response_id = missions_response.id
left join crm_player on missions_response.player_id = crm_player.id
LEFT JOIN crm_user ON crm_player.user_id = crm_user.id
group by Response, Document
我想得到这样的东西:
+ ----------------------- + ---------- + ---------- +
- product + total_sold + mean_price +
+ ----------------------- + ---------- + ---------- +
+ Perfiles- Esquinera.... + 669.000 + 2.500 +
+ Traslucent... + 900.000 + 30.000 +
以此类推 table 中的所有产品,事实是我无法将所有价格乘以分组期间的金额相加,也无法计算每个产品案例的平均价格table.
我正在尝试这个:
select
MAX(missions_answerselectmultiple.body::json ->> 'name') FILTER (WHERE missions_question.label = 'Producto') as Product,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Cantidad unidades vendidas') as Amount,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Valor Unidad') as Price,
sum( (MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Valor Unidad')) * (MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label )= 'Cantidad unidades vendidas') ) as Total
from missions_answer
left join missions_question on missions_answer.question_id = missions_question.id
left join missions_answertext on missions_answer.id = missions_answertext.answer_ptr_id
left join missions_answerselectmultiple on missions_answer.id = missions_answerselectmultiple.answer_ptr_id
left join missions_answerinteger on missions_answer.id = missions_answerinteger.answer_ptr_id
left join missions_response on missions_answer.response_id = missions_response.id
left join crm_player on missions_response.player_id = crm_player.id
LEFT JOIN crm_user ON crm_player.user_id = crm_user.id
group by Product
但是我明白了
SQL Error [42803]: ERROR: aggregate function calls cannot be nested
希望有人能帮助我,在此先感谢您的任何提示或帮助。
我认为您需要另一个聚合级别:
select product, sum(amount) as total_sold, avg(price) as mean_price
from (
select
ma.response_id as response,
cp."document" as document,
max(mas.body::json ->> 'name') filter(where mq.label = 'Producto') as Product,
max(mai.body) filter(where mq.label = 'Cantidad unidades vendidas') as Amount,
MAX(mai.body) filter(where mq.label = 'Valor Unidad') as Price
from missions_answer ma
left join missions_question mq on ma.question_id = mq.id
left join missions_answertext mat on ma.id = mat.answer_ptr_id
left join missions_answerselectmultiple mas on ma.id = mas.answer_ptr_id
left join missions_answerinteger mai on ma.id = mai.answer_ptr_id
left join missions_response mr on ma.response_id = mr.id
left join crm_player cp on mr.player_id = cp.id
left join crm_user cu on cp.user_id = cu.id
group by response, document
) t
group by product
请注意,我将查询更改为对所有 table 使用 table 别名;这缩短了代码,并使其更容易理解。
在这个
现在我尝试将我查询的所有产品与所有已售产品的总和以及每种情况下的平均价格分组,结果如下:
这是我的查询:
select
missions_answer.response_id as Response,
crm_player."document" as Document,
MAX(missions_answerselectmultiple.body::json ->> 'name') FILTER (WHERE missions_question.label = 'Producto') as Product,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Cantidad unidades vendidas') as Amount,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Valor Unidad') as Price
from missions_answer
left join missions_question on missions_answer.question_id = missions_question.id
left join missions_answertext on missions_answer.id = missions_answertext.answer_ptr_id
left join missions_answerselectmultiple on missions_answer.id = missions_answerselectmultiple.answer_ptr_id
left join missions_answerinteger on missions_answer.id = missions_answerinteger.answer_ptr_id
left join missions_response on missions_answer.response_id = missions_response.id
left join crm_player on missions_response.player_id = crm_player.id
LEFT JOIN crm_user ON crm_player.user_id = crm_user.id
group by Response, Document
我想得到这样的东西:
+ ----------------------- + ---------- + ---------- +
- product + total_sold + mean_price +
+ ----------------------- + ---------- + ---------- +
+ Perfiles- Esquinera.... + 669.000 + 2.500 +
+ Traslucent... + 900.000 + 30.000 +
以此类推 table 中的所有产品,事实是我无法将所有价格乘以分组期间的金额相加,也无法计算每个产品案例的平均价格table.
我正在尝试这个:
select
MAX(missions_answerselectmultiple.body::json ->> 'name') FILTER (WHERE missions_question.label = 'Producto') as Product,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Cantidad unidades vendidas') as Amount,
MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Valor Unidad') as Price,
sum( (MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label = 'Valor Unidad')) * (MAX(missions_answerinteger.body) FILTER (WHERE missions_question.label )= 'Cantidad unidades vendidas') ) as Total
from missions_answer
left join missions_question on missions_answer.question_id = missions_question.id
left join missions_answertext on missions_answer.id = missions_answertext.answer_ptr_id
left join missions_answerselectmultiple on missions_answer.id = missions_answerselectmultiple.answer_ptr_id
left join missions_answerinteger on missions_answer.id = missions_answerinteger.answer_ptr_id
left join missions_response on missions_answer.response_id = missions_response.id
left join crm_player on missions_response.player_id = crm_player.id
LEFT JOIN crm_user ON crm_player.user_id = crm_user.id
group by Product
但是我明白了
SQL Error [42803]: ERROR: aggregate function calls cannot be nested
希望有人能帮助我,在此先感谢您的任何提示或帮助。
我认为您需要另一个聚合级别:
select product, sum(amount) as total_sold, avg(price) as mean_price
from (
select
ma.response_id as response,
cp."document" as document,
max(mas.body::json ->> 'name') filter(where mq.label = 'Producto') as Product,
max(mai.body) filter(where mq.label = 'Cantidad unidades vendidas') as Amount,
MAX(mai.body) filter(where mq.label = 'Valor Unidad') as Price
from missions_answer ma
left join missions_question mq on ma.question_id = mq.id
left join missions_answertext mat on ma.id = mat.answer_ptr_id
left join missions_answerselectmultiple mas on ma.id = mas.answer_ptr_id
left join missions_answerinteger mai on ma.id = mai.answer_ptr_id
left join missions_response mr on ma.response_id = mr.id
left join crm_player cp on mr.player_id = cp.id
left join crm_user cu on cp.user_id = cu.id
group by response, document
) t
group by product
请注意,我将查询更改为对所有 table 使用 table 别名;这缩短了代码,并使其更容易理解。