我试图通过MySQl从数据库中的几个表中获取我的JavaFX应用程序的一些数据。
以下是查询:
select veturattable.id, veturattable.vetura,veturattable.modeli,veturattable.ngjyra,
veturattable.targa, renttable.pagesa, hargjimettable.shuma
from veturattable
left join hargjimettable
on hargjimettable.veturaid= veturattable.id
left join renttable
on renttable.veturaid = veturattable.id ;
以下是可出租的数据
以下是来自hargjimettable的数据
所以我需要的是向我展示这个:
veturaid | pagesa | shuma
1 | 150 | 91
10 | 110 | 40
答案 0 :(得分:1)
您实际上希望MAX()
和SUM()
一样{/ 1}}
GROUP BY
答案 1 :(得分:1)
实际上,您需要执行两个子查询,预先汇总每个ID的总金额。然后将每个单独连接回主要部分。如果你没有,你就会得到一个笛卡尔积。对于给定ID的hargjimettable表中的每个记录,它与每个金额的租赁表相连。因此,如果第一个表中有2个记录而第二个表中有3个记录,则得到6的倍数。
通过分别使用一个ID密钥预先查询每个分组,每个可能的总和最多只能有一个记录。如果它存在,那么抓住那条记录。左连接可防止某些ID无法显示。使用coalesce()可以防止显示空值。
select
v.id,
v.vetura,
v.modeli,
v.ngjyra,
v.targa,
COALESCE( RSum.SumPagesa, 0 ) as AllPagesa,
COALESCE( HSum.SumShuma, 0 ) as AllShuma
from
veturattable v
left join
( select
h.veturaid,
SUM( h.shuma ) as SumShuma
from
hargjimettable h
group by
h.veturaid ) HSum
ON v.id = HSum.veturaid
left join
( select
r.veturaid,
SUM( r.pagesa ) as SumPagesa
from
renttable r
group by
r.veturaid ) RSum
ON v.id = RSum.veturaid