在你把它标记为重复之前,我尝试了同一个网站上给出的几种解决方案,但没有一个有效。
我的查询
SELECT
temp_fk_settlements.sku,
temp_fk_settlements.order_item_id,
temp_fk_settlements.order_date,
sum(temp_fk_settlements.order_item_value),
sum(temp_fk_settlements.total_marketplace_fee),
sum(temp_fk_settlements.service_tax),
sum(temp_fk_settlements.settlement_value),
sum(temp_fk_settlements.commission),
sum(temp_fk_settlements.fixed_fee),
sum(temp_fk_settlements.shipping_fee),
sum(temp_fk_settlements.reverse_shipping_fee),
sum(temp_fk_settlements.invoice_amount)
FROM
temp_fk_returns,
temp_fk_settlements
WHERE
temp_fk_settlements.order_item_id = temp_fk_returns.order_item_id and
temp_fk_returns.return_type = 'customer_return'
GROUP BY
temp_fk_settlements.order_item_id
Run Code Online (Sandbox Code Playgroud)
我的错误
ERROR: column "temp_fk_settlements.sku" must appear in the GROUP BY clause or
be used in an aggregate function
LINE 2: temp_fk_settlements.sku,
Run Code Online (Sandbox Code Playgroud)
如果我尝试删除列 temp_fk_settlements.sku 它仍然在不同的列上给我错误。我被卡住了,因为没有一个解决方案有效。
我想根据 order_item_id 对结果进行分组。
我的表结构是
temp_fk_settlements:
Create table temp_fk_settlements(
settlement_reference_no varchar(50),
order_type char(20),
fulfillment_type varchar(25),
sku varchar(25),
order_id varchar(25),
order_item_id varchar(25),
order_date date,
dispatch_date date,
delivery_date date,
cancellation_date date,
settlement_date date,
order_status varchar(25),
quantity integer,
order_item_value integer,
refund integer,
protection_fund integer,
total_marketplace_fee double precision,
service_tax double precision,
settlement_value double precision,
commission_rate integer,
commission double precision,
fee_discount double precision,
cancellation_fee double precision,
fixed_fee integer,
emi_fee double precision,
total_weight float,
shipping_fee double precision,
reverse_shipping_fee double precision,
shipping_zone char(15),
token_of_apology double precision,
pick_and_pack_fee double precision,
storage_fee double precision,
removal_fee double precision,
invoice_id varchar,
invoice_date date,
invoice_amount integer,
sub_category char(25),
total_offer_amount double precision,
my_offer_share double precision,
flipkart_offer_share double precision
)
Run Code Online (Sandbox Code Playgroud)
temp_fk_returns:
CREATE TABLE temp_fk_returns(
return_id VARCHAR(25),
order_id VARCHAR(25),
order_item_id VARCHAR(25),
product_id VARCHAR(25),
title VARCHAR(100),
sku VARCHAR(25),
quantity INTEGER,
total_price INTEGER,
return_requested_on DATE,
return_initiated_on DATE,
return_tracking_id VARCHAR(25),
status VARCHAR(25),
reason VARCHAR(150),
sub_reason VARCHAR(150),
customer_comments VARCHAR,
return_type VARCHAR(25)
)
Run Code Online (Sandbox Code Playgroud)
如果查看查询的逻辑,就可以知道为什么会出现此错误:
SELECT
temp_fk_settlements.sku,
temp_fk_settlements.order_item_id,
temp_fk_settlements.order_date
Run Code Online (Sandbox Code Playgroud)
这表示,对于每一行,你想要的sku,order_item_id和order_date。
GROUP BY
temp_fk_settlements.order_item_id
Run Code Online (Sandbox Code Playgroud)
这表示您希望每个 unique 都占一行order_item_id,无论其他什么不同。
因此,如果存在多个sku或order_date相同的order_item_id,则数据库将无法知道要给您提供哪些值。MySQL 只会猜测,但 Postgres(与大多数其他数据库系统一样)会告诉您更改查询。
在这种情况下,您可能知道 eachorder_item_id对应于skuand的单个值order_date,因此您可以将它们全部添加到GROUP BY子句中:
GROUP BY
temp_fk_settlements.sku,
temp_fk_settlements.order_item_id,
temp_fk_settlements.order_date
Run Code Online (Sandbox Code Playgroud)
这表示您希望这三个字段的每个唯一组合对应一行,因此可以查看组合中的所有项目。