gpt4 book ai didi

mysql - 连接两个子查询并有一个字段: division of the results of two subqueries

转载 作者:行者123 更新时间:2023-11-29 20:48:57 24 4
gpt4 key购买 nike

我有一个这样的表:

 userid | trackid | path
123 70000 ad
123 NULL abc.com
123 NULL Apply
345 70001 Apply
345 70001 Apply
345 NULL Direct
345 NULL abc.com
345 NULL cdf.com

我想要一个这样的查询。当path='abc.com'时,num_website +1;当path='应用'时,num_apply +1

  userid | num_website | num_Apply | num_website/num_Apply
123 1 1 1
345 1 2 0.5

我的语法如下所示:

select * from 
(select userid,count(path) as is_CWS
from TABLE
where path='abc.com'
group by userid
having count(path)>1) a1
JOIN
(select userid,count(userid) as Apply_num from
where trackid is not NULL
group by userid) a2
on a1.userid=a2.userid

我的问题是1.如何根据我上面的语法获得字段num_website/num_apply?2.还有其他更简单的方法可以得到我想要的结果吗?

任何分享的地点都会受到赞赏。

最佳答案

最简单的方法是更改​​选择行:

选择 a1.userid、a1.is_CWS、a2.Apply_num、a1.is_CWS/a2.Apply_num FROM
(选择 userid,count(path) 作为 is_CWS
从表
其中路径='abc.com'
按用户 ID 分组
计数(路径)>1) a1
加入
(选择 userid,count(userid) 作为 Apply_num
从表
其中 trackid 不为 NULL
按用户 ID 分组)a2
在 a1.userid=a2.userid

然后继续查询其余部分。星星的意思是“选择一切”。如果您只想选择一些内容,您只需列出这些内容来代替星星,如果您想根据这些内容选择一些其他值,您也可以将它们放在星星中。在本例中,a1.is_CWS/a2.Apply_num 是一个表达式,MySql 知道如何根据 a1.is_CWS 和 a2.Apply_num 的值来计算它。

同样,您可以在单个表达式而不是子查询中执行这些子查询的许多操作。 objectNotFound 有正确的想法。您可以选择 SUM(path="abc.com") as Apply_num,而不需要执行子查询来检索具有特定属性的行数,并且无需再加入。做出这样的改变给我们带来了:

选择 a1.userid,
SUM(path="abc.com") as is_CWS,
a2.Apply_num,
is_CWS/a2.Apply_num FROM
table
加入
(选择 userid,count(userid) 作为 Apply_num
从表中
其中 trackid 不为 NULL
按用户 ID 分组)a2
在 a1.userid=a2.userid 上
按用户 ID 分组

请注意,我将 GROUP BY 移到了查询的末尾。另请注意,我现在不再引用 a1.is_CWS,而是仅引用 is_CWS(它不再位于 a1 子表内,因此我们可以引用它)

您可以对其他子查询执行相同的操作,然后它们可以共享 GROUP BY 子句,并且您将不再需要联接。

关于mysql - 连接两个子查询并有一个字段: division of the results of two subqueries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com