小编psr*_*psr的帖子

为什么在使用OVER(PARTITION BY x)时需要在GROUP BY中包含一个字段?

我有一个表,我想要对一个字段进行简单求和,按两列分组.然后我想要每年year_num的所有值的总和.

请参见示例:http://rextester.com/QSLRS68794

抛出此查询:"42803:column"foo.num_cust"必须出现在GROUP BY子句中或用于聚合函数",我无法弄清楚原因.为什么使用OVER(PARTITION BY x)的聚合函数要求求和字段在GROUP BY中?

select 
    year_num
    ,age_bucket
    ,sum(num_cust)
    --,sum(num_cust) over (partition by year_num)  --THROWS ERROR!!
from
    foo
group by
    year_num
    ,age_bucket
order by 1,2
Run Code Online (Sandbox Code Playgroud)

表:

| loc_id |  year_num |  gen |  cust_category |  cust_age |  num_cust |  age_bucket |
|--------|-----------|------|----------------|-----------|-----------|-------------|
| 1      | 2016      | M    | cash           | 41        | 2         | 04_<45      |
| 1      | 2016      | F    | Prepaid        | 41        | 1         | 03_<35      |
| 1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions window-functions

5
推荐指数
1
解决办法
659
查看次数

为什么CROSS JOIN条件在“ ON”子句中不起作用,仅在WHERE子句中起作用?

我想知道为什么条件交叉联接必须具有WHERE子句中指定的条件,以及为什么它在'ON'子句中不起作用。请参阅编译示例的链接:http : //rextester.com/IKY8693

业务环境:我需要生成一个开始日期和结束日期之间的日期列表,以填补空白,以便与第三张表保持连接,以便在特定月份返回零/空值。

我是如何做到的:让我们以一个带有YYYYMM开始和结束日期的用户表为例。

| user_id | start_yearmonth | end_yearmonth |
|---------|-----------------|---------------|
| u9876   | 201504          | 201610        |
| u5564   | 201602          | 201612        |
| u4435   | 201606          | NULL          |
Run Code Online (Sandbox Code Playgroud)

要交叉连接的表是所需的YYYYMM日期的表。

| yearmonth |
|-----------|
| 201601    |
| 201602    |
| 201603    |
| 201604    |
| 201605    |
| 201606    |
| 201607    |
| 201608    |
| 201609    |
| 201610    |
| 201611    |
| 201612    |
| 201701    | …
Run Code Online (Sandbox Code Playgroud)

postgresql cross-join

2
推荐指数
1
解决办法
3428
查看次数

如何返回至少有一行符合条件的值的所有行?

我正在尝试返回一个或多个Num_Occurrence行> = 10的ID的所有行.

以下是原始数据的示例:

+------+-----------+----------------+
| ID   | YearMonth | Num_Occurrence |
+------+-----------+----------------+
| 1234 | 201601    | 7              |
+------+-----------+----------------+
| 1234 | 201602    | 8              |
+------+-----------+----------------+
| 1234 | 201603    | 12             |
+------+-----------+----------------+
| 1234 | 201604    | 9              |
+------+-----------+----------------+
| 9898 | 201601    | 9              |
+------+-----------+----------------+
| 9898 | 201602    | 8              |
+------+-----------+----------------+
| 9898 | 201603    | 9              |
+------+-----------+----------------+
| 9898 | 201604    | 6              |
+------+-----------+----------------+
Run Code Online (Sandbox Code Playgroud)

这是所需的输出:

+------+-----------+----------------+
| …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

0
推荐指数
1
解决办法
79
查看次数