mysql - SUM 属于同一组的产品数量(group_id)
问题描述
我有一个产品目录,每个产品有 2 个数量(products_quantity 和 products_incoming_quantity),一些产品在 group_id 下分组。
我试图给属于同一组的产品相同的数量,这是所有数量的总和。
我尝试使用 GROUP_BY,但我很难编写 mysql 代码,因为 group_id 在另一个表中。
产品表:
|-------------|---------------|-------------------|----------------------------|
| products_id | products_name | products_quantity | products_incoming_quantity |
|-------------|---------------|-------------------|----------------------------|
| 10 | Product A | 05 | 02 |
|-------------|---------------|-------------------|----------------------------|
| 11 | Product B | 15 | 08 |
|-------------|---------------|-------------------|----------------------------|
| 12 | Product C | 12 | 00 |
|-------------|---------------|-------------------|-------------------------
产品分组表
|---------------------|-------------------|
| products_id | Group_ID |
|---------------------|-------------------|
| 10 | 01 |
|---------------------|-------------------|
| 11 | 01 |
|---------------------|-------------------|
询问 :
$listing_sql = "select
p.products_id,
p.products_quantity, p.products_incoming_quantity,
(p.products_quantity + p.products_incoming_quantity) AS sub_quantity,
g.products_id,
g.group_id
FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS . " WHERE
p.products_id = g.products_id";
我正在尝试添加新字段“total_quantity”以输出数量值,如下所示:
产品 A 总数量 = 30 产品 B 总数量 = 30
数量相同,因为它们属于同一组。
我需要一些帮助来创建这个查询。
谢谢 :)
解决方案
您可以加入按组聚合并查找总数量的子查询:
SELECT
p.products_id,
p.products_quantity,
p.products_incoming_quantity,
(p.products_quantity + p.products_incoming_quantity) AS sub_quantity,
t.total_quantity,
g.products_id,
g.group_id,
FROM products p
INNER JOIN product_groups g
ON p.products_id = g.products_id
INNER JOIN
(
SELECT
g.group_ID,
SUM(p.products_quantity + p.products_incoming_quantity) AS total_quantity
FROM products p
INNER JOIN product_groups g
ON p.products_id = g.products_id
GROUP BY g.group_ID
) t
ON g.group_id = t.group_id;
请注意,我将您的查询语法转换为使用显式内部连接,而不是旧式基于逗号的隐式连接。我编写查询的方式是现代编写查询的首选方式。
如果您使用的是 MySQL 8+ 或更高版本,我们或许可以简化分析函数的使用。
推荐阅读
- audio-streaming - 将原始音频数据从服务器流式传输到客户端
- nativescript - Nativescript RadDataForm - 从后面的代码中提供 valuesProvider
- android - variant.getJavaCompiler()、variant.getJavaCompileProvider()、variantOutput.getPackageLibrary()、variant.getPackageLibraryProvider() 中的警告
- angular - 已修复:Angular 9:使用 Angular 功能的未修饰基类
- ruby-on-rails - 是什么导致 bin/rails:与非类/模块(TypeError)相比?
- r - 在 R 中查找正则表达式调用以仅返回名字和姓氏或完整的团队名称
- java - 如何在多逗号行中使用逗号分隔字符串
- node.js - 将节点版本 8 更新到 10 时如何获得所有兼容的软件包版本?
- ios - 我们可以为 iPhone 和 Apple Watch 应用程序使用相同的代码库吗?
- azure - 在 Log Analytics 中使用共享的用户定义 Kusto 函数