mysql - 如何在 super 查询中使用子查询的结果?

标签 mysql sql sqlite

我试图在多张 table 的情况下找出平均年龄。问题是年龄是从出生日期计算的派生属性。现在我写了下面的查询,其中包含所有满足条件的人的年龄。现在我想找到所有这些的平均年龄,但我不确定如何在 super 查询中使用子查询的结果。

查询是:

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));

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

最佳答案

如果我没理解错的话,您只需要一个简单的数字作为最终结果。您只需再上一级即可找到平均年龄。

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)))

关于mysql - 如何在 super 查询中使用子查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29019493/

相关文章:

database - Qt SQLITE 查询 QVariant 无效

sql - 使用 sql 'like' 命令使用另一个表中的数据删除行

mysql - 比较和更新百万行的最快方法

sql - 匹配字符串中的 2 个字符 - SQL

Android SQLite 数据库从查询中删除重复项

sqlite - ScalikeJDBC + SQlite : Cannot change read-only flag after establishing a connection

mysql - 使用sql group by查询获取最小值和最大值

mysql - 用于选择聊天的单个 SQL 查询

mysql - Ruby on Rails - 设置空外键

php - 如何在 PHP 请求之间存储或共享实时数据?