Mysql 包含没有针对特定日期返回行的列

标签 mysql sql

我想问一个有关 mysql 查询的简单问题。

我有一个名为 trans 的表:

+----+---------------------+------+-------+----------+----------+
| ID | Date                | User | PCNum | Customer | trans_In |
+----+---------------------+------+-------+----------+----------+
|  8 | 2013-01-23 16:24:10 | test | PC2   | George   |       10 |
|  9 | 2013-01-23 16:27:22 | test | PC2   | Nick     |        0 |
| 10 | 2013-01-24 16:28:48 | test | PC2   | Ted      |       10 |
| 11 | 2013-01-25 16:36:40 | test | PC2   | Danny    |       10 |
+----+---------------------+------+-------+----------+----------+

以及另一位指定客户:

+----+---------+-----------+
| ID | Name    | Surname   |
+----+---------+-----------+
|  1 | George  |           |
|  2 | Nick    |           |
|  3 | Ted     |           |
|  4 | Danny   |           |
|  5 | Alex    |           |
|  6 | Mike    |           |
   .
   .
   .
   .
+----+---------+-----------+

我想查看某个日期范围内特定客户的 trans_in 列的总和,但也将在所选日期范围内没有任何记录的客户包含在结果集中。它们的 trans_in 总和可能显示为 NULL 或 0,但这并不重要...

我有以下查询:

SELECT
  `Date`,
  Customer,
  SUM(trans_in) AS 'input'
FROM trans
WHERE Customer IN('George','Nick','Ted','Danny')
    AND `Date` >= '2013-01-24'
GROUP BY Customer
ORDER BY input DESC;

但这只会返回“Ted”和“Danny”的总和,因为他们只在 1 月 24 日之后有交易...

如何包含 WHERE IN (...) 函数内的所有客户,甚至是那些在选定日期范围内没有交易的客户?

我想我必须以某种方式将他们加入到客户表中,但我不知道如何做。

提前致谢!!

:)

最佳答案

为了包含一个表中的所有记录而不匹配另一个表中的记录,您必须使用 LEFT JOIN。

SELECT
  t.`Date`,
  c.name,
  SUM(t.trans_in) AS 'input'
FROM customers c LEFT JOIN trans t ON (c.name = t.Customer AND t.`Date` >= '2013-01-24')
WHERE c.name IN('George','Nick','Ted','Danny')
GROUP BY c.name
ORDER BY input DESC;

当然,我要提一下,您应该通过 ID 来引用客户,而不是通过相关表中的名称来引用客户。您当前的设置会导致信息重复。如果客户更改了姓名,您现在必须更新 trans 表中的所有相关记录,而不仅仅是客户表中的记录。

关于Mysql 包含没有针对特定日期返回行的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14604188/

相关文章:

c# - 在c#中调用mysql存储过程

sql - 将行转换为列

php 循环跳过或缺少 mysql 查询的某些结果

sql - 在 select 中添加 "-"而不是空格

sql - 在sql中对表进行简单的统计

mysql - Rails无法使用mysql生成模型

php - Mysql加密/存储敏感数据,

mysql - 如何设置mysql日期最小值和最大值?

php 在嵌套 for 循环之外使用变量

mysql - SQL根据按周排序的交货日期选择订购的产品数量