,count(distinct case when taggeddate>current_date-7 and pojie=1 then order_id end) as sa_pojie7_count postgresql 如何修改代码
时间: 2024-10-09 12:01:33 浏览: 27
count_distinct:在PostgreSQL中扩展以COUNT(DISTINCT ...)聚合的替代方法
5星 · 资源好评率100%
在PostgreSQL中,如果你想计算过去7天内标记为"pojie"(假设这是一个布尔型或整数标识)且有订单记录的唯一订单ID的数量,原始代码可能不太精确。这里有一个建议的修正版:
```sql
SELECT COUNT(DISTINCT CASE WHEN tagged_date >= CURRENT_DATE - INTERVAL '7 days' AND pojie = 1 THEN order_id END) AS sa_pojie7_count
FROM your_table;
```
这里的改动包括:
- 使用 `INTERVAL '7 days'` 而不是 `current_date-7` 来确保时间间隔的精确计算。
- 删除了不必要的 `end` 关键字,因为CASE语句本身就是完整的表达式。
- 确保`tagged_date`列是日期类型并且已经进行了正确的比较。
如果`taggeddate`是一个字符串,需要先转换成日期类型,如:
```sql
SELECT COUNT(DISTINCT CASE WHEN EXTRACT(DAY FROM (DATE(taggeddate))::DATE) >= EXTRACT(DAY FROM CURRENT_DATE - INTERVAL '7 days') AND pojie = 1 THEN order_id END) AS sa_pojie7_count
FROM your_table;
```
阅读全文