如何在超级查询中使用子查询的结果?

Posted

技术标签:

【中文标题】如何在超级查询中使用子查询的结果?【英文标题】:How to use results of a sub-query in a super query? 【发布时间】:2015-05-15 04:23:42 【问题描述】:

我试图在多个表的情况下找到平均年龄。问题是年龄是从出生日期计算得出的派生属性。现在我编写了以下查询,其中包含所有符合条件的人的年龄。现在我想找到所有这些的平均年龄,但我不确定如何在超级查询中使用子查询的结果。

查询是:

Select  
    case
        when date(dob, '+' ||
            (strftime('%Y', 'now') - strftime('%Y', dob)) ||
            ' years') <= date('now')
        then strftime('%Y', 'now') - strftime('%Y', dob)
        else strftime('%Y', 'now') - strftime('%Y', dob) - 1
    end
    as age
from UserProfile where User_ID in
(Select User_ID from UserProfile
where User_ID IN
(Select Channel_ID
from Channels
where Channel_Type = 'Public-Channel'
group by Channel_ID
HAVING (SUM(LENGTH(Video_IDs) - LENGTH(REPLACE(Video_IDs, ',', '')) + 1)) > 4));

输出是所有年龄的单列列表,你能告诉我如何计算平均年龄,因为这是我唯一想要显示的东西。

【问题讨论】:

mysql 还是 sqlite?这两种产品在很多方面都有自己的方式...... 【参考方案1】:

如果我理解正确,您只需要一个简单的数字作为最终结果。你可以再上一层来找到平均年龄。

SELECT avg(age) FROM (
Select  
    case
        when date(dob, '+' ||
            (strftime('%Y', 'now') - strftime('%Y', dob)) ||
             ' years') <= date('now')
         then strftime('%Y', 'now') - strftime('%Y', dob)
         else strftime('%Y', 'now') - strftime('%Y', dob) - 1
     end
     as age
 from UserProfile where User_ID in
 (Select User_ID from UserProfile
 where User_ID IN
 (Select Channel_ID
from Channels
  where Channel_Type = 'Public-Channel'
 group by Channel_ID
 HAVING (SUM(LENGTH(Video_IDs) - LENGTH(REPLACE(Video_IDs, ',', '')) +      1)) > 4)))

【讨论】:

哦,这么简单。谢谢!!

以上是关于如何在超级查询中使用子查询的结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在子查询中使用外部查询中的列从另一个表中获取结果?

Python-Sqlalchemy-Postgres:如何将子查询结果存储在变量中并将其用于主查询

如何在 Zend 中使用表上的子查询执行查询并获取 Rowset 对象作为结果?

如何在子查询中实现多列过滤

如何在教义中进行子查询并将结果水合到对象中?

使用子查询保存查询结果的最佳方法是啥?