同时访问多个表并乘以SQL

时间:2019-01-28 16:46:52

标签: mysql

我的问题非常具体,我无法为标题找到一个更好的名称。

我有3个表,分别是Pessoa (Person)Bicicleta (Bicicle)Viagem (Trip)

enter image description here

我想做的是按字母顺序选择出游的个人姓名,再加上Avaliacao (Evaluation)乘以Valor_Viagem (Trip cost)

我尝试做的事情(无法正常工作或未完成):

select distinct PESSOA.Nome, VIAGEM.Avaliacao, VIAGEM.Id_Bicicleta, BICICLETA.Valor_Viagem from PESSOA, VIAGEM
    join BICICLETA ON VIAGEM.Id_Bicicleta = BICICLETA.Id where PESSOA.Email IN (
        SELECT Email_Utilizador FROM VIAGEM
        );

哪个给我:

enter image description here

^如前所述,这不是我想要的。

1 个答案:

答案 0 :(得分:0)

我也不是100%知道您要寻找什么,但是我假设您需要一个包含每个人的Avalacao * Valor_Viagem汇总的不同名称的列表(因此,一个5次旅行的人有5倍的Avalacao * Valor_Viagem + ... + ...)。

这很容易实现:

select PESSOA.Nome, VIAGEM.Avaliacao, VIAGEM.Id_Bicicleta, BICICLETA.Valor_Viagem from PESSOA, VIAGEM, SUM(VIAGEM.Avaliacao * BICICLETA.Valor_viagem)  AS trip_cost
join BICICLETA ON VIAGEM.Id_Bicicleta = BICICLETA.Id where PESSOA.Email IN (
    SELECT Email_Utilizador FROM VIAGEM
    ) GROUP BY PESSOA.Nome;

会发生以下情况:

  • 首先,您需要为每次旅行计算乘积
  • 与您使用GROUP BY子句将名称相同的人分组在一起
  • 将SUM与GROUP BY结合使用会导致对该组中人员的所有值求和,在这种情况下,所有记录都具有相同的PESSOA。Nome

警告语

这假设您将使用不同的名称。这看起来很冒险。最好为每个人分配一个唯一的ID,然后将此ID用作外键而不是名称。