MYSQL- 3 个数据库之间特定年份的平均工资

MYSQL- average salary for certain years between 3 database

我在 PHPMYADMIN 环境中工作。我的目标是从互联网上下载描述法官的数据、他们工作的地区、他们制作的文件、决定的数量、他们的薪水以及我上传到我的数据库的类似内容。 5 个人参与了这个项目,创建了 5 个不同的数据库,每个数据库代表法官工作的特定区域(国家的一部分)。现在我的目标是,例如,找到一名法官(在 5 个数据库之间工作)做出最多的决定,或者特定年份的最高薪水,特定年份法官的平均薪水和类似的事情。我遇到的问题可能是我在PHPMYADMIN中上传了数据,创建了5个数据库,每个数据库代表一个地区,我在这里遇到一个错误,使用这个显示,我找到了2018年薪水最高的法官:

select id_sudca
     , plat_2018 
  from sudy_sk.enrichment_platy 
 union all 
select id_sudcu
     , prijem_2018 
  from nabozny1.m_priznania 
 union all 
select id_priznania
     , prijmy_za_rok_2018 
  from putrovec.majetkove_priznania 
 order 
    by plat_2018;

根据这个观点,我找到了 2018 年法官的平均工资:

select AVG(plat_2018) FROM(select id_sudca, plat_2018 from sudy_sk.enrichment_platy union all select id_sudcu, prijem_2018 from nabozny1.m_priznania union all select id_priznania, prijmy_za_rok_2018 from putrovec.majetkove_priznania) tablealias;

关键是我考虑了一个可以找出哪一年的显示(在我使用 2018-2015 年的数据库中,当然我将上述显示用于这些剩余的年份,如 2017 年, 2016,2015) 平均来说是最好/最差的评委,简单来说就是他们平均哪一年赚得最多(所有评委都踢了),哪一年最少。

我想出了一个类似的显示(但老实说,它看起来很糟糕,我一点也不喜欢它)而且根本不对。

select AVG(platy) FROM (select id_sudca, plat_2018 from sudy_sk.enrichment_platy union all select id_sudcu, prijem_2018 from nabozny1.m_priznania union all select id_priznania, prijmy_za_rok_2018 from putrovec.majetkove_priznania order by plat_2018 UNION ALL

select id_sudca, plat_2017 from sudy_sk.enrichment_platy union all select id_sudcu, prijem_2017 from nabozny1.m_priznania union all select id_priznania, prijmy_za_rok_2017 from putrovec.majetkove_priznania order by plat_2017 UNION ALL

select id_sudca, plat_2016 from sudy_sk.enrichment_platy union all select id_sudcu, prijem_2016 from nabozny1.m_priznania union all select id_priznania, prijmy_za_rok_2016 from putrovec.majetkove_priznania order by plat_2016 UNION ALL

select id_sudca, plat_2015 from sudy_sk.enrichment_platy union all select id_sudcu, prijem_2015 from nabozny1.m_priznania union all select id_priznania, prijmy_za_rok_2015 from putrovec.majetkove_priznania order by plat_2015);

我在5个数据库之间工作,但我只解决3个数据库之间的工资问题。 因此,我想就正确的显示语法提供建议或帮助。

可以给每个union成员加上一个字面值来表示它对应的是哪一年,然后在外层查询中聚合:

select yr, avg(plat) as avg_plat
from (
    select 2018 as yr, id_sudca, plat_2018 as plat from sudy_sk.enrichment_platy 
    union all select 2018, id_sudcu, prijem_2018 from nabozny1.m_priznania 
    union all select 2018, id_priznania, prijmy_za_rok_2018 from putrovec.majetkove_priznania 
    union all select 2017, id_sudca, plat_2017 from sudy_sk.enrichment_platy 
    union all select 2017, id_sudcu, prijem_2017 from nabozny1.m_priznania 
    union all select 2017, id_priznania, prijmy_za_rok_2017 from putrovec.majetkove_priznania 
    union all select 2016, id_sudca, plat_2016 from sudy_sk.enrichment_platy 
    union all select 2016, id_sudcu, prijem_2016 from nabozny1.m_priznania 
    union all select 2016, id_priznania, prijmy_za_rok_2016 from putrovec.majetkove_priznania 
    union all select 2015, id_sudca, plat_2015 from sudy_sk.enrichment_platy 
    union all select 2015, id_sudcu, prijem_2015 from nabozny1.m_priznania 
    union all select 2015, id_priznania, prijmy_za_rok_2015 from putrovec.majetkove_priznania
) t
group by yr

那么如果要显示平均值最大的年份,只需在查询中添加一个order by子句,只保留最上面一行:

order by avg_plat desc limit 1

我强烈建议规范化您的设计。所有这些数据实际上应该存储在一个 table 中,其中有一列存储年份。

你的结构很奇怪,每年都有专栏吗?

select AVG(platy) 
FROM 
    (select 2018 yyear,id_sudca, plat_2018 as platy from sudy_sk.enrichment_platy) 
    union all (select 2018 yyear, id_sudcu, prijem_2018 from nabozny1.m_priznania) 
    union all (select 2018 yyear,id_priznania, prijmy_za_rok_2018 from putrovec.majetkove_priznania order by plat_2018 )
    UNION ALL (select 2017 yyear,id_sudca, plat_2017 from sudy_sk.enrichment_platy )
    union all (select id_sudcu, prijem_2017 from nabozny1.m_priznania )
    union all (select id_priznania, prijmy_za_rok_2017 from putrovec.majetkove_priznania order by plat_2017 )
    UNION ALL (select id_sudca, plat_2016 from sudy_sk.enrichment_platy) 
    union all (select id_sudcu, prijem_2016 from nabozny1.m_priznania) 
    union all (select id_priznania, prijmy_za_rok_2016 from putrovec.majetkove_priznania order by plat_2016) 
    UNION ALL (select id_sudca, plat_2015 from sudy_sk.enrichment_platy)
    union all (select id_sudcu, prijem_2015 from nabozny1.m_priznania )
    union all (select id_priznania, prijmy_za_rok_2015 from putrovec.majetkove_priznania order by plat_2015
    );

如果您需要每年的平均值,您可以为年份添加一个列 GROUP BY it

select yyear,AVG(platy) 
FROM 
    (   
        (select 2018 yyear,id_sudca, plat_2018 as platy from sudy_sk.enrichment_platy) 
        union all (select 2018 yyear, id_sudcu, prijem_2018 from nabozny1.m_priznania) 
        union all (select 2018 yyear,id_priznania, prijmy_za_rok_2018 from putrovec.majetkove_priznania order by plat_2018 )
        UNION ALL (select 2017 yyear,id_sudca, plat_2017 from sudy_sk.enrichment_platy )
        union all (select 2017 yyear,id_sudcu, prijem_2017 from nabozny1.m_priznania )
        union all (select 2017 yyear,id_priznania, prijmy_za_rok_2017 from putrovec.majetkove_priznania order by plat_2017 )
        UNION ALL (select 2016 yyear,id_sudca, plat_2016 from sudy_sk.enrichment_platy) 
        union all (select 2016 yyear,id_sudcu, prijem_2016 from nabozny1.m_priznania) 
        union all (select 2016 yyear,id_priznania, prijmy_za_rok_2016 from putrovec.majetkove_priznania order by plat_2016) 
        UNION ALL (select 2015 yyear,id_sudca, plat_2015 from sudy_sk.enrichment_platy)
        union all (select 2015 yyear,id_sudcu, prijem_2015 from nabozny1.m_priznania )
        union all (select 2015 yyear,id_priznania, prijmy_za_rok_2015 from putrovec.majetkove_priznania order by plat_2015
        )
    ) t1
GROUP BY yyear;