【问题标题】:How can I count the number of all invoice's products?如何计算所有发票产品的数量?
【发布时间】:2018-08-19 11:40:24
【问题描述】:

我有一个查询,选择这样的特定发票:

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       |
+------+--------------+------+-----------+---------+

【问题讨论】:

  • 你应该展示你想要的结果。您的问题不清楚您要达到的目标。
  • 不清楚您想要的结果是什么。您可能会要求从发票中获取每一行并包含一列(每行都相同),这是发票中所有 DISTINCT 产品的计数。
  • 还添加一个连贯的数据样本,而不仅仅是预期的结果..
  • 只是需要注意,这取决于此处的用例,可能值得考虑实现 get_product_count_by_invoice_id() 函数
  • 为什么不只计算应用程序中返回的行数?

标签: mysql sql count


【解决方案1】:

这是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 而不是 null。

【讨论】:

  • GROUP BY... WHERE 真的吗?来吧阳光。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
相关资源
最近更新 更多