繁体   English   中英

在SQL中将列添加到另一个表

[英]Adding column to another table in SQL

我有一个三个数字的表,是其他数字的百分比差异。

我用过的查询看起来像这样:

select abs((((select avg(Number) from Table1 where File='File1') - 
    (select avg(Number) from Table1 where File='File2')) / 
    (select avg(Number) from Table1 where File='File2'))*100)
union all
select abs((((select avg(Number) from Table1 where File='File3') - 
    (select avg(Number) from Table1 where File='File4')) / 
    (select avg(Number) from Table1 where File='File4'))*100)
union all
select abs((((select avg(Number) from Table1 where File='File5') - 
    (select avg(Number) from Table1 where File='File6')) / 
    (select avg(Number) from Table1 where File='File6'))*100)

这导致如下表格:

| (No column name) |
|:----------------:|
|             1.54 |
|             1.15 |
|             2.04 |

这些数字是三个文件中一类数据的百分比差异。 这些文件名是Table1中的Column1 我怎么能写这个查询,以便表格看起来像这样? (在这些数字左侧的列中添加文件名)。

| FileName | (No column name) |
|:--------:|:----------------:|
| File1    |             1.54 |
| File2    |             1.15 |
| File3    |             2.04 |

只需将文件名添加到查询中:

select FileName='File1', PCT_DIFF=abs((((select avg(Number) from Table1 where File='File1') - 
    (select avg(Number) from Table1 where File='File2')) / 
    (select avg(Number) from Table1 where File='File2'))*100)
union all
select 'File3', abs((((select avg(Number) from Table1 where File='File3') - 
    (select avg(Number) from Table1 where File='File4')) / 
    (select avg(Number) from Table1 where File='File4'))*100)
union all
select 'File5', abs((((select avg(Number) from Table1 where File='File5') - 
    (select avg(Number) from Table1 where File='File6')) / 
    (select avg(Number) from Table1 where File='File6'))*100)

简化查询!

select file,
       100 * (prev_avg - avg) / avg as percent_diff
from (select file, avg(Number) as avg,
             lag(avg(Number)) over (order by file) as prev_avg
      from table1
      where file in ('File1', 'File2', 'File3', 'File4', 'File5', 'File6')
      group by file
     ) t
where file in ('File2', 'File4', 'File6');

这假定文件按名称排序。 如果以其他方式订购(例如按日期或尺寸),则应易于修改。

这也很容易推广到其他行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM