我有这样一张桌子:


|users_id  | request_at | status    | banned |
| -------- | ---------- | --------  | ------ |
| 2        | 2013-10-01 | cancelled | No     |
| 3        | 2013-10-01 | cancelled | Yes    |
| 4        | 2013-10-01 | cancelled | No     |
| 5        | 2013-10-02 | confirmed | No     |
| 6        | 2013-10-03 | cancelled | No     |
| 7        | 2013-10-03 | cancelled | No     |

我想统计一下在特定日期有多少行的状态!=已确认,以及哪里被禁止=否.但在条件不匹配的情况下,我也希望值为0.

select 
    distinct (COUNT(users_id) OVER (PARTITION BY request_at)) AS count_ban,
    request_at
    from Alll 
    where banned='No' and status != 'confirmed'

结果:

| count_ban | request_at |
| --------- | ---------- |
| 2         | 2013-10-03 |
| 3         | 2013-10-01 |

它向我显示了正确的值,但我还希望看到行

| count_ban | request_at |
| --------- | ---------- |
| 0         | 2013-10-02 |

做这件事最简单的方法是什么?

推荐答案

SUM替换COUNT,再加上CASE..WHENexpression,并将WHERE的条件移到那里,应该可以做到这一点:

select 
    distinct 
        SUM(CASE WHEN banned='No' AND status != 'confirmed' THEN 1 ELSE 0 END) 
        OVER (PARTITION BY request_at) AS count_ban,
    request_at
    from Alll     

你可以考虑使用GROUP BY:

SELECT
  SUM(CASE WHEN banned='No' AND status != 'confirmed' THEN 1 ELSE 0 END) AS count_ban
, request_at
FROM Alll 
GROUP BY request_at

Sql相关问答推荐

使用sede获取不一定有两个不同标签的所有问题

Ffltter&;Dart SQL Lite包:是否可以在一个查询中执行多条更新语句(每次执行不同的WHERE参数)

按分隔符和总和分析字符串

PostgreSQL 9.6嵌套的INSERT/RETURN语句的CTE性能低得令人无法接受

在xml.Modify方法中使用子字符串和可能的替代方法

如何简化此PostgreSQL查询以计算平均值?

PATINDEX中与[A-Z]匹配(U除外)的正则表达式

用于SQL协助的XQUERY()

提取连续时间戳范围的SQL

SQL查询正在工作,但返回空结果

使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

如何判断小数点后千位是否不为0

连续天跟踪购买情况(将标记返回到另一列?)

如何计算两个非周期性时间序列+分组的重叠持续时间

SQL 语句将一列中的值与另一列中的不同值相加,同时按第三列进行分组?

SQL Server - 复杂场景 - 比较状态并填充值到后续行

Postgres更新增量之间的差异

检索具有相同位置的最小和最大store 数量

Oracle SQL 从多个条件中 Select 但具有相同的 id

多列上的 SQL UNIQUE 约束 - 它们的组合必须是唯一的还是至少其中之一?