繁体   English   中英

SQL对每个用户的有效事务计数

[英]SQL Count valid Transactions per User

我需要获取在两个日期之间进行特定数量的有效交易的客户列表。

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;

笔记:

  • LEFT JOIN 第二个表上的条件通常属于ON子句。
  • 对日期和字符串常量使用单引号。 双引号可用于转义标识符。
  • count()从第二个表开始计数。 如果没有匹配项,则计数将为0
  • 仅当min_transactions0时才需要LEFT JOIN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM