[英]Inner Join AND Left Join in Same Query?? (mySQL)
我目前有一个查询选择/显示我想要的结果; 但是,其中一列不是我想要显示的格式,因为我选择的代码仅在从另一个表完成连接时才会在结果图表中转换。
但是,我的查询中已经有一个 LEFT Join,所以当我尝试从一个单独的表进行额外的连接时,我的查询不起作用。 有谁知道这是否可能/如何保留我现有的查询但添加一个额外的连接。
这是我当前的查询和结果:
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”(即现有“应用程序”表中的 cycle_id)与单独“周期”表中的“id”连接起来)
在一个单独的查询中,我将其作为 (INNER JOIN Cycles ONcycles.id = applications.cycle_id)
这会将“ye”行从 1、2、3 等变为与周期表中匹配的物理年时间范围。
对不起,如果这一切都很复杂,但如果有人知道如何保留我现有的查询但允许表加入以显示相应的 ID 值,我将不胜感激。
谢谢!!
首先,您可以使用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;
(注意:即使有间隙,您仍然可以使用 window 函数,但您的样本数据没有间隙。)
我猜这也会简化join
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.