如何计算invoice所有产品的数量?

zaqlnxep  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(315)

我有一个查询,选择一个特定的发票,如下所示:

SELECT i.*
FROM invoices i
WHERE i.id = 15

另外,我需要选择所有属于此发票的产品。我使用以下查询:

SELECT i.*, p.*
FROM invoices i
LEFT JOIN pivot pi
  ON pi.invoice_id = i.id
LEFT JOIN products p
  ON pi.product_id = p.id
WHERE i.id = 15

现在我想知道,我该怎么用 count() 并计算出发票上的产品数量?
我想要这样的输出:

+------+--------------+------+-----------+---------+
| i.id |   i.number   | p.id |  p.name   | count() |
+------+--------------+------+-----------+---------+
| 15   | 123456       | 3    | SX12      | 5       |
| 15   | 123456       | 17   | MGS2      | 5       |
| 15   | 123456       | 14   | BFE12-3   | 5       |
| 15   | 123456       | 32   | LG2-1     | 5       |
| 15   | 123456       | 6    | VBDS2     | 5       |
+------+--------------+------+-----------+---------+
fcg9iug3

fcg9iug31#

这是我的工作 GROUP BY .
尝试以下操作:

SELECT i.id, i.number, p.id, p.name, IFNULL(COUNT(*),0) product_count
  FROM invoices i
  LEFT JOIN pivot pi ON pi.invoice_id = i.id
  LEFT JOIN products p ON p.id = pi.product_id
 WHERE (whatever you need)
 GROUP BY i.id, i.number, p.id, p.name

我猜从你使用 LEFT JOIN 您希望发票显示在结果集中的操作,即使它没有关联的产品。这个 IFNULL() 函数使这些行包含 0 而不是空的。

相关问题