【发布时间】:2012-06-03 19:34:33
【问题描述】:
我在计算分组查询中的 ID 时遇到问题。问题是这个查询是根据另一个变量分组的。例如,我需要计算发票内订购了多少产品,而这张发票是在制作多张发票的公司内部。我希望很清楚;无论如何,我希望使用这个 SQL 一切都会更清楚:
SELECT C.FULLNAME,C.COMPANY_ID,SUM(I.GROSSTOTAL) AS TOTAL,
SUM(I.OTHER_MONEY_VALUE/1.18) AS OTHER_TOTAL,
COUNT(IR.PRODUCT_ID) AS NO_PRODUCTS
FROM COMPANY C
JOIN #DSN2_ALIAS#.INVOICE I ON C.COMPANY_ID=I.COMPANY_ID
JOIN #DSN2_ALIAS#.INVOICE_ROW IR ON I.INVOICE_ID=IR.INVOICE_ID
JOIN #DSN3_ALIAS#.PRODUCT P ON P.PRODUCT_ID=IR.PRODUCT_ID
JOIN #DSN3_ALIAS#.PRODUCT_CAT PC ON P.PRODUCT_CATID=PC.PRODUCT_CATID
WHERE P.PRODUCT_ID=<cfqueryparam value="#attributes.product_id#" cfsqltype="cf_sql_integer">
GROUP BY C.COMPANY_ID,C.FULLNAME
ORDER BY TOTAL DESC
在我定义了产品 id 之后,查询在输出中列出了公司列表,以及它的总销售额,并且 NO_PRODUCTS 的值与发票数量相同,因为查询是按 company_id 和 fullname 分组的它,但是每张发票里面有多个产品,因此变量 no_products 定义错误:(
我怎样才能得到正确的计数?
【问题讨论】:
-
你尝试使用内部查询?
-
@Ofer 不,我不知道如何使用它:) 我认为它必须解决这个问题))
-
@Jack 我认为它不会改变任何东西 :)
-
@venom 我们都认为,你真的尝试过吗?
COUNT(DISTINCT PRODUCT_ID) AS NO_PRODUCTS -
目前,您的描述不清楚。整个查询列出了每家公司的总交易量,累计了该公司的所有发票。现在您说您想知道每张发票中列出了多少种不同的产品。如果这是正确的,那么您需要识别选择列表中的每张发票,并将其添加到 GROUP BY,然后执行 COUNT 或(也许)COUNT(DISTINCT IR.PRODUCT_ID)。但这是一个完全不同的查询。
标签: mysql