mysql - 加入应具有值的列的返回零

标签 mysql join

我认为我的查询格式不正确,但我的 Google 技能还没有找到有效的解决方案。这是我的查询:

use movement;
select t1.StoreNumber, t1.saleDate, t1.departmentNumber, sum(t1.dollarsSold), sum(ifnull(t2.loss,0))
from movement.movement t1
left join knownLoss.producekl t2 ON t1.StoreNumber = t2.Store
where t1.StoreNumber = 3
AND (t1.departmentNumber = 10 OR t1.departmentNumber = 20 OR t1.departmentNumber = 27 OR t1.departmentNumber = 30 OR t1.departmentNumber = 40 OR t1.departmentNumber = 50 OR t1.departmentNumber = 51 OR t1.departmentNumber = 60 OR t1.departmentNumber = 70 OR t1.departmentNumber = 80 OR t1.departmentNumber = 81 OR t1.departmentNumber = 82 OR t1.departmentNumber = 90 OR t1.departmentNumber = 95 OR t1.departmentNumber = 96 OR t1.departmentNumber = 97)
AND t1.saleDate > date_sub(curdate(), interval 7 day)
group by t1.saleDate, t1.StoreNumber, t1.departmentNumber;

我的预期输出是给出一个按销售日期、商店和部门分组的表格,在最后两列中汇总销售总额和销售损失

我预期的输出应该是这样的:

-------------------------------------------------------------
| Store Number | Sale Date | Dept Num | Dollars Sold | Loss |
-------------------------------------------------------------
|      1       | 2017-3-9  |    10    |    7435.26   | 0.00 |
-------------------------------------------------------------
|      1       | 2017-3-9  |    20    |    30.50     | 3.00 |
-------------------------------------------------------------
|      1       | 2017-3-10 |    10    |    2503.22   | 4.00 |
-------------------------------------------------------------
|      2       | 2017-3-11 |    10    |    5685.49   |17.50 |
-------------------------------------------------------------
|      3       | 2017-3-9  |    10    |    75.26     | 4.55 |
-------------------------------------------------------------
|      4       | 2017-3-9  |    10    |    7435.26   | 0.00 |
-------------------------------------------------------------
|      4       | 2017-3-13 |    30    |      20.45   | 1.99 |
-------------------------------------------------------------

损失列不是我预期的输出,而是损失列全为零。

-------------------------------------------------------------
| Store Number | Sale Date | Dept Num | Dollars Sold | Loss |
-------------------------------------------------------------
|      1       | 2017-3-9  |    10    |    7435.26   | 0.00 |
-------------------------------------------------------------
|      1       | 2017-3-9  |    20    |    30.50     | 0.00 |
-------------------------------------------------------------
|      1       | 2017-3-10 |    10    |    2503.22   | 0.00 |
-------------------------------------------------------------
|      2       | 2017-3-11 |    10    |    5685.49   | 0.00 |
-------------------------------------------------------------
|      3       | 2017-3-9  |    10    |    75.26     | 0.00 |
-------------------------------------------------------------
|      4       | 2017-3-9  |    10    |    7435.26   | 0.00 |
-------------------------------------------------------------
|      4       | 2017-3-13 |    30    |      20.45   | 0.00 |
-------------------------------------------------------------

即使当我单独查询 t2 时它也会返回结果

use knownLoss;
select t2.Store, t2.Department, t2.klDate, sum(t2.loss)
from producekl t2
group by klDate, Store, Department;

所以我的加入一定是搞砸了,但我不知道怎么办。有什么想法吗?

最佳答案

FWIW,我觉得这更容易阅读......

我不熟悉 curdatee() 函数,所以我用它代替了其他东西......

SELECT t1.StoreNumber
     , t1.saleDate
     , t1.departmentNumber
     , SUM(t1.dollarsSold)
     , SUM(IFNULL(t2.loss,0))
  FROM movement.movement t1
  LEFT
  JOIN knownLoss.producekl t2 
    ON t1.StoreNumber = t2.Store
 WHERE t1.StoreNumber = 3
   AND t1.departmentNumber IN(10,20,27,30,40,50,51,60,70,80,81,82,90,95,96,97)
   AND t1.saleDate > DATE_SUB(CURDATE(), INTERVAL 7 DAY)
 GROUP BY t1.saleDate
     , t1.StoreNumber
     , t1.departmentNumber;

请注意 GROUP BY 中缺少 saledate。不好。

关于mysql - 加入应具有值的列的返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42687736/

相关文章:

java - 在java程序中创建临时表mysql的问题

php - 用其他内容替换 SELECT 语句

MySQL 用 LEFT JOIN IFNULL 替换 UNION

PHP MySQL 使用条件连接连接两个表

mysql - 具有 id 的多个列的 SQL 连接

mySQL:左连接,需要对不同类型的数据进行连接

PHP计算登录和注销的剩余时间(以分钟为单位)

mysql - HAProxy 带有 mysql-check 选项,不起作用

mysql - 数据库规范化我需要吗

Java线程连接()