从客户表中选择具有条件的客户 ID 并计算使用日志表 - SQL 放置的所有日志

Posted

技术标签:

【中文标题】从客户表中选择具有条件的客户 ID 并计算使用日志表 - SQL 放置的所有日志【英文标题】:Select Customer ID with Condition From Customer Table and Count all log placed using Log table- SQL 【发布时间】:2020-10-04 20:06:24 【问题描述】:

我有两个如下定义的表,

表:客户:

   ID       | Customer_Name |Sex (bit)
 --------------------------
    1       | John        | men
    2       | Mack        |women
    3       | Andy        |women

表:日志:

   ID      | Customer_ID| Date
 --------------------------
    1      | 1        | 2020-06-03
    2      | 3        |2020-06-03

我想编写一个查询来选择每个具有性别条件的名称和每个客户使用 JOIN 放置的所有日志的计数。结果将是,

1 |  1
2 |  0
3 |  0

我的查询:

(SELECT Customer.ID,  COUNT(Log.Customer_ID) as number 
 from 
 Customer
  Left JOIN 
   Log
     on 
      Customer.Sex=0 and
       Customer.ID=Log.Customer_ID
        and  
        Log.Date>='2020-06-13' 
        group by Customer.ID)

但它返回的结果不正确。请指教

【问题讨论】:

日期是字符串还是日期时间?在日期周围加上单引号使其成为字符串。我想你可能需要 CAST('2020-06-13' AS datetime) 日期是日期时间,但它没有问题过滤掉客户的性别 在 C# 中尝试之前,始终在 SQL Server Management Studio 中测试查询。错误消息在 SSMS 中更好。在 SSMS 中运行的任何查询也将在 c# 中使用 SQLClient 类运行,前提是参数类型相同且默认数据库相同。 【参考方案1】:

使用条件聚合

SELECT Customer.ID,  COUNT(case Customer.Sex when 0 then Log.Customer_ID end) as number 
 from 
 Customer
  Left JOIN 
   Log
     on 
       Customer.ID=Log.Customer_ID
        and  
        Log.Date>='2020-06-13' 
        group by Customer.ID

如果您只需要男性/女性,请将谓词移至 WHERE

select Customer.ID, COUNT(Log.Customer_ID) as number 
from Customer
left join Log
     on Customer.ID=Log.Customer_ID
        and Log.Date>='2020-06-13'
where Customer.Sex = 0 
group by Customer.ID

【讨论】:

感谢您的帮助...但我没有过滤掉性即时通讯...它返回所有客户 @SoroshFt,您所需的输出示例列出了所有 3 个客户。如有错误请指正。 我只需要女性或男性的输出,即使日志计数为 0 。但是这个输出是客户的全部【参考方案2】:

你能显示这个查询返回的结果吗?

我认为左连接不是一个好方法,如果你想过滤 on 子句(或只使用 where),我会尝试使用内连接。

(SELECT Customer.ID,  COUNT(Log.Customer_ID) as number 
from Customer
JOIN Log on Customer.Sex=0 and Customer.ID=Log.Customer_ID and Log.Date>='2020-06-13' 
group by Customer.ID)

【讨论】:

需要左连接,以免过滤掉女性记录。

以上是关于从客户表中选择具有条件的客户 ID 并计算使用日志表 - SQL 放置的所有日志的主要内容,如果未能解决你的问题,请参考以下文章

从一个表中选择与客户关联的工单记录或另一表中的客户子项

如何使用 Laravel 5 从相关表中查询具有条件的表

计算具有多个条件的列的许多不同组合

如何将选择结果分配给变量?

根据呼叫日志状态层次结构计算类别中的唯一客户

从一个表中选择三个表中的数据