同一个查询中的内连接和左连接?? (我的SQL)

时间:2021-05-11 00:33:15

标签: mysql

我目前有一个查询选择/显示我想要的结果;但是,其中一列不是我想要显示的格式,因为我选择的代码仅在从另一个表完成连接时才在结果图表中进行转换。

但是,我的查询中已经有一个 LEFT 联接,因此当我尝试从单独的表中进行附加联接时,我的查询不起作用。有谁知道是否有可能/如何保留我现有的查询但添加额外的连接。


这是我当前的查询和结果:

Select a.ye, a.AppsCreated, ((a.AppsCreated- b.AppsCreated)/b.AppsCreated) as "% Change" from(
select count(*) as "AppsCreated" , cycle_id as ye
from applications
group by cycle_id
)a 
left join
(
select cycle_id as ye, count(*) as "AppsCreated"
from applications
group by cycle_id
)b 
on a.ye -1 = b.ye

结果

<头>
创建的应用 % 变化
1 3000 .00
2 4000 .33
3 5000 .25
4 3002 .39
5 4005 .33
6 3008 .33

我正在尝试将“ye”(也就是现有“applications”表中的 cycle_id)与来自单独“cycles”表的“id”结合起来)

在单独的查询中,我将其设为 (INNER JOIN cycle ON cycle.id = applications.cycle_id)

这会将“ye”行从 1、2、3 等转换为与周期表中匹配的物理年份时间范围。

抱歉,如果这一切都很复杂,但如果有人知道如何保留我现有的查询但允许表连接以显示相应的 ID 值,我将不胜感激。

谢谢!!

1 个答案:

答案 0 :(得分:0)

首先,您可以使用 lag() 来表达您的查询,假设您对所有行都有一个 cycle_id - 1

select cycle_id, count(*) as cnt,
       lag(count(*)) over (order by cycle_id) as prev_cnt,
       (-1 + (count(*) / lag(count(*)) over (order by cycle_id))) as ratio_change
from applications a
group by cycle_id;

(注意:即使有差距,你仍然可以使用窗口函数,但你的样本数据没有差距。)

我猜这也会简化 join