我有一个表,我想要对一个字段进行简单求和,按两列分组.然后我想要每年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) 我想知道为什么条件交叉联接必须具有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) 我正在尝试返回一个或多个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)