我一直在尝试不同的方式做到这一点,但不知道如何去最好的方式。PostgreSQL子查询计算从不相关的模型
我有几个模型都与父母'客户'模型有关。对于这个例子(这与我的实际问题无关),让我们假设客户有电子邮件订单和电话订单。因此每个电子邮件订单或电话订单都与客户有关,但彼此之间没有任何关系。
我想在客户端上运行一个查询,并返回所有客户端以及每个客户端的订单中的字段总数(例如:USD Amount - 两个子模型中都存在的字段)对于这两个订单都是TAX(因此需要返回两个汇总列)。
一种方法是在每个案例中运行子查询和另一个子查询 - 外部子查询将两个内部的总和相加。但是,在这种情况下,当我尝试捕获两个字段时,出现错误,说明子查询只能返回一列。
这种结构的最佳方式是什么?
编辑:
表结构(与具有用于示例的目的,相同的结构的电子邮件/电话订单大量简化的)如下:
客户端表 -
CREATE TABLE clients_client
(
id integer NOT NULL,
deleted boolean NOT NULL,
company_name character varying(100)
)
电子邮件订单 -
CREATE TABLE clients_emailorders
(
id serial NOT NULL,
added_at timestamp with time zone NOT NULL,
deleted boolean NOT NULL,
tx_category integer NOT NULL,
status integer NOT NULL,
amount numeric(18,8) NOT NULL,
tax numeric(18,8) NOT NULL,
tx_id character varying(200) NOT NULL,
completed_at timestamp with time zone,
notes text,
client_id integer NOT NULL
)
电话订购 -
CREATE TABLE clients_phoneorders
(
id serial NOT NULL,
added_at timestamp with time zone NOT NULL,
deleted boolean NOT NULL,
tx_category integer NOT NULL,
status integer NOT NULL,
amount numeric(18,8) NOT NULL,
tax numeric(18,8) NOT NULL,
tx_id character varying(200) NOT NULL,
completed_at timestamp with time zone,
notes text,
client_id integer NOT NULL
)
我想运行(而我什么都没有做什么工作的,所以这是举例)查询是大意如下的内容:
SELECT "clients_client"."id", "clients_client"."company_name", total_order_amount, total_order_tax
FROM "clients_client"
WHERE "clients_client"."deleted" = False
凡“total_order_amount”是的SUM所有子模型的订单金额和'total_order_tax'都是两个子模型的税额总和。
我应该补充说,每个客户端可以有零个或更多的每个订单类型。
'说子查询只能返回一个column.'这是一个* *标子查询。通常,子查询可以产生多于一行的行数,实际上是一个表表达式。只要给它一个别名并参考它的字段。 – joop
请编辑您的问题,为正在讨论的表格和您正在使用的查询添加'create table'语句。 [_Formatted_](http://stackoverflow.com/help/formatting)**文本**请[无屏幕截图](http://meta.stackoverflow.com/questions/285551/why-may-i-not上传图片的代码时,要求一个问题/ 285557#285557) –
我已编辑上面的原始问题,以包括此。 – visionjcv