SQL查询按月对事务进行分组

时间:2017-01-24 22:11:27

标签: mysql sql

----------------------------------------
|transaction_id|customer_id|month|value|
----------------------------------------

我正在寻找一个SQL查询,该查询将返回在10月份而非11月份拥有更多交易的客户的客户ID,或者仅返回11月份交易(10月份没有交易)的客户的客户ID。月份列的类型为字符串(不是日期)

我在考虑内部联接可以做到这一点,但过去我不知道如何解决这个问题。

这就是我的尝试

select customer_id
from tbl_name
where (select count(month is 'October') > count(month is 'November') from tbl_name)

谢谢

1 个答案:

答案 0 :(得分:0)

你计算记录。所以你聚合。您希望每个customer_id计数。所以你分组 customer_id。你在查询中忘记了这一点。

然后你要比较HAVING条款中的计数,即在计算了10月和11月的记录之后。

select customer_id
from tbl_name
where month in ('October', 'November')
group by customer_id
having count(case when month = 'October' then 1 end) >
       count(case when month = 'November' then 1 end)
    or count(case when month = 'October' then 1 end) = 0;

如您所见,您无需再访问该表两次。只是聚合并看看你有什么: - )