首页 文章

如果在连接表中没有匹配的记录,则对表进行分组?

提问于
浏览
1

我有一个表格列出发票,我们将该年度的发票分组为以下内容

SELECT
  sum(totalValue/((100 + Vat)/100)) AS purchases ,
  year(invoice_date) AS invoiceyear
FROM invoices
GROUP BY year(invoice_date)
ORDER BY invoiceyear Desc;

我们还有一个发票表列表,其中包含供应商列表中SupplierID的链接,产品表还包括到supplierID的链接列表

我需要对天气进行分组,或者不是发票是否有库存订单,所以我需要分组一个事实,即是否有匹配的供应商ID的产品

这是我陷入困境的时候,当我运行连接时,如果supplierID字段为null或不为null,那么我将如何分组?

还有一些发票适用于多种产品,我如何确保我不在发票表中创建多个记录?

1 回答

  • 0

    假设您的SupplierID列名为 SupplierID 并且每个表都有一个 id 列,这里是一个答案:

    SELECT
        SUM(`totalValue` / ((100 + `Vat`)/100)) AS `purchases`,
        `order_type`,
        `invoice_year`
    FROM (
        SELECT `i`.*,   
            IF(COUNT(`p`.`id`) = 0, 'custom', 'stock') AS `order_type`,
            YEAR(`i`.`invoice_date`) AS `invoice_year`
        FROM `invoices` AS `i`
        LEFT JOIN `products` AS `p` 
            ON `i`.`SupplierID` = `p`.`SupplierID`
        GROUP BY `i`.`id`
    ) AS `filtered`
    GROUP BY `order_type`, `invoice_year`
    ORDER BY `invoice_year` DESC
    

    说明:为此,您需要在产品表上保留联接,按发票ID进行分组 . 如果有匹配的产品,产品ID的计数将返回0或> 0 .

    我们将它放在一个子查询中,因为我们不希望产品数量与外部分组混合,如果在某些情况下每个发票有超过1个产品,这会导致数学问题(即有很多产品包含相同的供应商ID) .

相关问题