SQL-当连接不涵盖它们时,如何添加与ID直接对应的命名列
Posted
技术标签:
【中文标题】SQL-当连接不涵盖它们时,如何添加与ID直接对应的命名列【英文标题】:SQL- How to add in named columns directly corresponding to an ID when join doesn't cover them 【发布时间】:2021-06-21 07:13:40 【问题描述】:我正在尝试根据日期、ID 和国家/地区加入两个表。表 1 有一个额外的列,直接对应于 ID 列 表一
| Date | ID |Country|ID name |Clicks
| ----------| --------|-------|------------------------|------- |
| 25/02/2021| 42587750|Spain |Targeting Details Spain |5
| 26/02/2021| 42587750|Spain |Targeting Details Spain |15
但是,另一个表对国家/地区的跟踪略有不同,所以看起来像这样
Table 2
| Date | ID |Country|Clicks
| ----------| --------|-------|------|
| 25/02/2021| 42587750|Spain |4
| 25/02/2021| 42587750|France |1
| 26/02/2021| 42587750|Spain |13
| 26/02/2021| 42587750|Italy |2
我想查看所有国家/地区的案例,因此我目前已根据日期、ID 和国家/地区进行了完全联接。但是,这会产生这样的数据
Date | table1.ID | table1.Country | table2.ID | table2.Country | ID name | table1.Clicks | table2.clicks |
---|---|---|---|---|---|---|---|
25/02/2021 | 42587750 | Spain | 42587750 | Spain | Targeting Details Spain | 5 | 4 |
26/02/2021 | 42587750 | Spain | 42587750 | Spain | Targeting Details Spain | 15 | 13 |
25/02/2021 | 42587750 | France | 1 | ||||
25/02/2021 | 42587750 | Italy | 1 |
我用这个来加入:
from table1 full outer join table2 on table1.date=table2.date and table1.ID=table2.ID and table1.country=table2.country
当我参加比赛的所有 3 件事时,我都会输入所有正确的详细信息,但是当国家/地区不同时,我不再输入 ID 名称。
是否可以在国家不匹配的情况下,在拉入国家的同时拉出ID名称?
当我取出***信息时,我可以得到正确的数字,像这样
from table1 full outer join table2 on table1.date=table2.date and table1.ID=table2.ID
我尝试使用 AVG 函数而不是 SUM 来获得点击次数,但这没有奏效。
【问题讨论】:
感谢@ankit 修复格式! 您期望不同国家/地区的 ID 名称值是什么?存储在哪里? 请提供样本数据和期望的结果来说明您想要做什么。 嗨@AnkitBajpai,我希望 ID 名称与 ID 匹配。因此,在这种情况下,我希望所有 42587750 个 ID 都将 Targeting Details Spain 作为 ID 名称 【参考方案1】:您的查询结构是否使用coalesce()
?
select coalesce(t1.date, t2.date) as date,
coalesce(t1.id, t2.id) as id,
coalesce(t1.country, t2.country),
coalesce(t1.idname, max(t1.idname) over (partition by coalesce(t1.id, t2.id)) as idname,
t1.clicks, t2.clicks
from table1 t1 full outer join
table2 t2
on t1.date = t2.date and
t1.ID = t2.ID and
t1.country = t2.country
【讨论】:
服务器正在注册这个位 ["max"(aggregate.line_item_id) OVER (PARTITION BY COALESCE(aggregate.line_item_id, dbm.line_item_id))] 作为聚合、窗口函数或分组函数,并抱怨在按功能分组内有这个 @Aki 。 . .那没有意义。那是一个窗口函数,Presto 应该可以很好地处理它。查询中没有聚合函数,所以我怀疑您正在运行的查询与此不同。 可能是因为我没有把正确的括号放在正确的位置。不过,谢谢@gordon,我会玩弄这条线 @Aki 。 . .我可以证明它可以使用其他数据库,但我不知道 Presto 在线的“小提琴”。以上是关于SQL-当连接不涵盖它们时,如何添加与ID直接对应的命名列的主要内容,如果未能解决你的问题,请参考以下文章