我需要获取在两个日期之间进行特定数量的有效交易的客户列表。
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)
答案 0 :(得分:0)
我认为这是您想要的查询:
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;
注意:
LEFT JOIN
中 second 表上的条件通常属于ON
子句。count()
从第二个表开始计数。如果没有匹配项,则计数为0
。LEFT JOIN
为min_transactions
时才需要0
。