【问题标题】:MYSQL function MAX() between 5 databases5个数据库之间的MYSQL函数MAX()
【发布时间】:2020-11-20 20:31:22
【问题描述】:

我在 PHPMYADMIN 环境中工作。我的目标是从互联网上下载数据,这些数据描述了法官、他们工作的地区、他们所做的文件、决定的数量、他们的薪水以及我上传到我的数据库中的类似内容。我创建了 5 个数据库,每个数据库都代表一个特定的地区(国家的一部分)。例如,现在我的目标是找到做出最多判决的法官。使用此命令:

SELECT ID_sudca
     , Rozhodnutia
  FROM sudy_sk.informacie
UNION 
SELECT id_sudcu
     , rozhodnutie
  FROM nabozny1.sudca
UNION  
SELECT SUDCA_ID
     , POCET_ROZHODNUTI
  FROM `ke-sud-neznik`.`sudca`
UNION  SELECT `ID_sudca`, `Rozhodnutia` 
  FROM `gerboc`.`sudcovia` 
UNION 
SELECT `ID_SUDCU`, `Rozhodnutia` 
   FROM `biz`.`sudcovia`;` 

我将创建一个查找表,其中所有的法官都加载在judge_id(它是一个唯一的数字,象征着每个法官)和决定的数量下,也就是说,就像我把所有的法官和他们的号码都放在这个查找中一样表,用 表示。我现在的目标是从所有地区(5 个数据库)中找出所有信息,例如,我会考虑第一个问题,即决策数量最多/最少的法官。我想使用 MAX() 函数,但有必要(至少我认为是这样)与提到的显示一起使用它。但不幸的是我做不到。你不能帮我吗?或者有什么想法?

使用您的第一个显示器,它会显示一些输出,但此输出不正确。值的顺序并不像你看到的那样正确。

    select id_sudca, rozhodnutia from sudy_sk.informacie 
union select id_sudcu, rozhodnutie from nabozny1.sudca 
union select sudca_id, pocet_rozhodnuti from `ke-sud-neznik`.sudca
union select id_sudca, rozhodnutia from gerboc.sudcovia 
union select id_sudcu, rozhodnutia from biz.sudcovia
order by rozhodnutia;

有趣的是,我尝试了相同的视图,只是更改了表格的名称,以找出 2018 年法官薪水最高的人(按 desc 排序),这里正确显示给我,但是当我发现听证会不再,我从为什么会这样想。有什么想法吗?

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

我已经知道错误出在哪里了,这个select union的条件不满足:

列还必须具有相似的数据类型

【问题讨论】:

  • “我创建了 5 个数据库” - 为什么?即使有充分的理由,使用相同的结构不是更明智吗?您无法使用聚合函数找到“全部”信息。
  • 你的意思是什么结构?
  • 在表/列标识符中包含数学运算符是一个灾难性的坏主意

标签: mysql sql sql-order-by union sql-limit


【解决方案1】:

您可以只使用order bylimit

select id_sudca, rozhodnutia from sudy_sk.informacie 
union select id_sudcu, rozhodnutie from nabozny1.sudca 
union select sudca_id, pocet_rozhodnuti from `ke-sud-neznik`.sudca
union select id_sudca, rozhodnutia from gerboc.sudcovia 
union select id_sudcu, rozhodnutia from biz.sudcovia
order by rozhodnutia desc limit 1

或者,如果同一个id_suca可能出现在不同的表中,使用聚合

select id_sudca, sum(rozhodnutia) 
from (
    select id_sudca, rozhodnutia from sudy_sk.informacie 
    union select id_sudcu, rozhodnutie from nabozny1.sudca 
    union  select sudca_id, pocet_rozhodnuti from ke-sud-neznik.sudca
    union  select id_sudca, rozhodnutia from gerboc.sudcovia 
    union  select id_sudcu, rozhodnutia from biz.sudcovia
) t
group by id_sudca
order by sum(rozhodnutia) desc limit 1

【讨论】:

  • 我还是想问一下,我已经在表之间建立了主键和外键的连接,当我使用你的命令时我当然会列出我想要的输出,但是当我点击judge_id(看看这个数字下隐藏的名字是什么)不适合我的名字法官表......在这个命令中插入一个内部连接显示会很好吗?还是?
  • @JozefVendel:这听起来与您最初提出的问题不同,它没有提及这些问题。如果是这样,则应将其作为一个新问题提出。
  • 是的,我可能会把它作为一个新问题,但我仍在解决这个问题,我正在寻找输出错误的原因,如下所示,我还附上了一个图片。
  • @JozefVendel:我可以看到您发布了另一个问题,我认为这是正确的方法。同时,您不接受这个答案有什么原因吗?
  • 正如您在图片中看到的那样,它没有为我排序决策字段的正确值,我想为什么
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 2022-11-04
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多