【问题标题】:count ids inside the grouped tables计算分组表中的 id
【发布时间】: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


【解决方案1】:

我希望我能理解你想要做什么,如果我没有理解,对不起

SELECT FULLNAME,COMPANY_ID
FROM (
SELECT 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">
ORDER BY TOTAL DESC )
GROUP BY COMPANY_ID,FULLNAME

【讨论】:

  • 但正如你稍后可以看到的,我需要加入这个 product_id,而 product_ids 被计算并命名为 no_products :(
【解决方案2】:

您可以尝试执行内部查询。使用发票检索您的产品数量。类似的东西。

SELECT C.FULLNAME,C.COMPANY_ID,SUM(I.GROSSTOTAL) AS TOTAL,
       SUM(I.OTHER_MONEY_VALUE/1.18) AS OTHER_TOTAL,NO_PRODUCTS
    FROM COMPANY C
    JOIN #DSN2_ALIAS#.INVOICE I ON C.COMPANY_ID=I.COMPANY_ID
    JOIN (select INVOICE_ID,count(PRODUCT_ID) as NO_PRODUCT from #DSN2_ALIAS#.INVOICE_ROW group by invoice_id) 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

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 2016-07-28
    • 1970-01-01
    • 2019-10-27
    • 2020-11-08
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多