mysql - 月数的嵌套 SQL 查询

标签 mysql sql oracle

<分区>

我是 SQL 的新手,想知道如何为这个问题编写查询。 假设我们有这些字段: date_created date_unsubscribed subscriberid

enter image description here

如何编写一个 SQL 查询,按月列出有多少人订阅了列表、取消订阅了列表,以及有多少净订阅者(新订阅者减去取消订阅者)。 全部在一个查询中...

最佳答案

这是一个使用条件聚合union all的选项:

select month(dt), 
       count(case when subscribe = 1 then 1 end) subscribecount,
       count(case when subscribe = -1 then 1 end) unsubscribecountt,
       sum(subscribe) overallcount
from (
   select date_created as dt, 1 as subscribe
   from yourtable
   union all
   select date_unsubscribed, -1
   from yourtable
   where date_unsubscribed is not null
) t
group by month(dt) 

子查询创建一个日期列表,带有订阅或取消订阅的标志。然后您可以使用 countcase 来确定订阅者/取消订阅者的适当数量。

SQL Fiddle Demo

关于mysql - 月数的嵌套 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38647478/

相关文章:

c# - 为什么 Toad 喜欢我的 Like 查询但 C# 不喜欢我的查询?

sql - GORM - 动态查询 - 分离标准?

c# - 从 C# 使用 Odbc 调用 Oracle 包函数

MySQL性能: join of two tables on common foreign key: still "using where"

mysql - SQL 查询运行速度极慢

sql - 查询每个学生的平均分

php - 将 mysql 查询的结果插入现有表

java - JPA 在一个项目中插入触发器之前执行,并在另一个项目中具有不同的行为

MySQL 选择所有固定的记录和一些其他标记的记录以达到限制

mysql - Laravel 5.1 一对多和多对多模型的远程关系