mysql - 从多个表中选择数据并按类别分组
问题描述
我有三个表,我想加入并获取类别中的数据。
Category Table
-id
-name
Product table
-id
-category_id
-name
Loading table
-product_id
-qty
-Outdate
Stock table
-product_id
-qty
-Indate
所以我想选择所有产品并将所有产品与特定的 category_id 相加,我希望这个输出
Category name open_balance total_stock_in_jana total_loadings_janaout
------------------------------------------------------------------------------------------
categori 1 500 0 500
category 2 400 0 400
但是这个 sql 是用它们的类别明智地获取所有产品,所以我想在类别中更改它
我的 sql
SELECT
products.id,
products.name, products.open_stock as open_balance,
(select categories.name from categories where categories.id=products.category_id) as
category_name,
(select ifnull(sum(stocks.qty),0) from stocks where stocks.pid=products.id and
DATE(stocks.Indate)
<= CURDATE()-1) as total_stock_in_jana,
(select ifnull(sum(loadings.qty),0) from loadings where loadings.pid=products.id and
DATE(loadings.Outdate) <= CURDATE()-1) as total_loadings_jana,
(select ifnull(sum(stocks.qty),0) from stocks where stocks.pid=products.id and
DATE(stocks.Indate)
= CURDATE()) as total_stock_in_today,
(select ifnull(sum(loadings.qty),0) from loadings where loadings.pid=products.id and
DATE(loadings.Outdate) = CURDATE()) as total_loadings_today
from products
先感谢您
解决方案
试试这个查询.. 这里的 category 表被带到外面并添加了一个 Join with prod 表以进行分组。
SELECT categories.id, categories.name,
SUM(products.open_stock) AS open_balance,
SUM( (SELECT IFNULL(SUM(stocks.qty),0) FROM stocks WHERE stocks.pid=products.id AND stocks.Indate <= CURDATE()-1) ) AS total_stock_in_jana,
SUM( (SELECT IFNULL(SUM(loadings.qty),0) FROM loadings WHERE loadings.pid=products.id AND loadings.Outdate <= CURDATE()-1) ) AS total_loadings_jana,
SUM( (SELECT IFNULL(SUM(stocks.qty),0) FROM stocks WHERE stocks.pid=products.id AND stocks.Indate = CURDATE()) ) AS total_stock_in_today,
SUM( (SELECT IFNULL(SUM(loadings.qty),0) FROM loadings WHERE loadings.pid=products.id AND loadings.Outdate = CURDATE()) ) AS total_loadings_today
FROM categories INNER JOIN products ON categories.id = products.category_id GROUP BY categories.id;
推荐阅读
- symfony - Symfony/Doctrine ManyToMany 按分配或保存的顺序获取记录
- r - R : 对名称相似的数据文件进行类似操作
- css - 从水平列表菜单中删除浮动,同时保留下拉菜单
- excel - 为 FIND 函数找到的单元格创建超链接
- swift - 是否可以在 Swift 中创建具有 Self 或关联类型要求的通用计算属性,如果可以,如何?
- sass - 后代选择器 (>) 与根选择器 (&) 结合导致编译错误
- css - 更改其他人网页的小部件大小
- c# - UWP LaunchFullTrustProcessForCurrentAppAsync - 找不到 EXE 文件
- react-native - 将整个屏幕分成四等份
- c++ - 并行写入内存映射文件