从客户表中选择具有条件的客户 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 放置的所有日志的主要内容,如果未能解决你的问题,请参考以下文章