mysql - SQL 计算每个用户的有效事务
问题描述
我需要获取在两个日期之间进行特定数量的有效交易的客户列表。
SELECT
customer.customer_id,
COUNT(
CASE WHEN transaction.transaction_date>="2010-01-01"
THEN 1
ELSE NULL
END
) AS Total
FROM customer
LEFT JOIN transaction ON customer.customer_id = transaction.customer_id
GROUP BY customer.customer_id
HAVING (Total>=min_transactions AND Total<=max_transactions)
这不会返回任何东西。通过删除 COUNT(..) 中的 CASE,它返回每个用户的交易量,但它也包含无效和超出范围的交易。
CASE 循环不应该像在 COUNT 中那样工作吗?
只计算事务而不合并两个表是一个更好的主意吗?
(使用 MySQL)
解决方案
我认为这是您想要的查询:
SELECT c.customer_id, COUNT(t.customer_id) as Total
FROM customer c LEFT JOIN
transaction t
ON c.customer_id = t.customer_id AND
t.transaction_date >= '2010-01-01'
GROUP BY c.customer_id
HAVING Total >= min_transactions AND Total <= max_transactions;
笔记:
- a 中第二个表的条件
LEFT JOIN
通常属于ON
子句。 - 对日期和字符串常量使用单引号。双引号可用于转义标识符。
count()
是从第二张表开始计算的。如果没有匹配项,则计数为0
。LEFT JOIN
仅当min_transactions
is ever0
时才需要A。
推荐阅读
- sql-server-2016 - SQL Server 复制作业错误:消息:命令文本:SELECT TOP 1 0 FROM [dbo].[tablename] WITH (TABLOCK, HOLDLOCK)
- android - 总是收到错误消息:在重力左侧找不到抽屉视图
- dart - 实现广度优先搜索算法时出现内存不足错误
- ios - 我必须每年使用 Enterprise Licensing 发布一个新的 iOS 版本吗?
- javascript - 功能组件内的状态初始化(无无限循环)
- idris - 在 Idris 中定义组
- php - 单元测试 Mail::send()
- c - 从内存中删除整个二叉树
- android - Android LibVLC,在没有 TextureView 的情况下拍摄 RTSP 流的快照
- spring-boot - 由使用 @Inject 的第 3 方库实现的 Spring Bean 与 Spring 的注入机制冲突