在postgresql中从多个表获取数据时,是否得到错误的输出?
当我试图运行这个查询时,它给出了错误的输出在postgresql中从多个表获取数据时,是否得到错误的输出?,sql,postgresql,Sql,Postgresql,当我试图运行这个查询时,它给出了错误的输出 SELECT (TO_CHAR(sale_order.date_order,'DD')) AS ORDER_DATE, (TO_CHAR(sale_order.date_order,'DD-mon-yyyy')), SUM(sale_order.amount_total) FROM public.sale_order_line, public.product_product, public.product_template, public
SELECT
(TO_CHAR(sale_order.date_order,'DD')) AS ORDER_DATE,
(TO_CHAR(sale_order.date_order,'DD-mon-yyyy')),
SUM(sale_order.amount_total)
FROM
public.sale_order_line,
public.product_product,
public.product_template,
public.product_category,
public.sale_order
WHERE
sale_order_line.product_id = product_product.id AND
product_product.product_tmpl_id = product_template.id AND
product_template.categ_id = product_category.id AND
sale_order.id = sale_order_line.order_id AND
product_category.name = 'Bboy'
and
TO_CHAR(sale_order.date_order,'MON') = 'MAR' --${sale_month} AND
and
TO_CHAR(sale_order.date_order,'YYYY') = '2015' --'${sale_year}
GROUP BY
(TO_CHAR(sale_order.date_order,'DD-mon-yyyy')),
(TO_CHAR(sale_order.date_order,'DD'))
ORDER BY
ORDER_DATE ASC
我认为它是行的乘法,但无法求解。
如何解决此问题?我已使用子查询重写了您的代码。我希望这将帮助您在不增加行数的情况下获取数据
SELECT
(TO_CHAR(sale_order.date_order,'DD')) AS ORDER_DATE,
(TO_CHAR(sale_order.date_order,'DD-mon-yyyy')),
SUM(sale_order.amount_total)
FROM
public.sale_order
WHERE
TO_CHAR(sale_order.date_order,'MON') = 'MAR' --${sale_month} AND
and
TO_CHAR(sale_order.date_order,'YYYY') = '2015' --'${sale_year}
and exists
(select product_category.name
from
public.product_category
inner join
public.product_template
on (product_template.categ_id = product_category.id)
inner join
public.sale_order_line
on (sale_order_line.product_id = product_product.id)
where
sale_order.id = sale_order_line.order_id and
product_category.name = 'Bboy'
)
GROUP BY
(TO_CHAR(sale_order.date_order,'DD-mon-yyyy')),
(TO_CHAR(sale_order.date_order,'DD'))
ORDER BY
ORDER_DATE ASC
也许您可以更详细地了解错误的输出是什么,以及正确的输出是什么样子。SUM的值显示的大于实际值。在这种情况下,请尝试不进行分组的查询,并返回原始销售订单信息。这样,你可以看到它将要求和的记录,你可以决定为什么一个记录不应该在那里。我对您的模式了解不多,但我怀疑这是因为sales_order.amount_total是销售订单的总值,而不仅仅是该订单上“Bboy”销售项目的值。因此,如果你有一个50美元的订单,一辆75000美元的梅赛德斯,那么你使用的价值将是75050美元提示:
和TO-CHAR(sale\u-order.date\u-order,'MON')='MAR'和TO-CHAR(sale\u-order.date\u-order,'yyyyy')='2015'
应替换为sale\u-order.date和sale\u-order.date>='01-03-2015':date和sale\u-order.date