我有一个有关旧车,其所有者,事件以及这些事件的参加者的数据库:
所用表的图像:
PK:主键 FK:外键
现在,我需要获取每个成员(memberId)参加的不同事件(eventId)的数量。 重要说明:成员可以拥有多辆可以参加活动的汽车。
这是我的尝试之一
select m.memberId, count(a.eventId).
from members m where m.memberId in (select c.memberId from cars c where m.memberId =
c.memberId and c.carId in
(select d.carId from attendants a where c.carId = d.carId))
order by m.memberId
我也尝试过使用join和group by来获得正确的结果,但是却无济于事。 有谁知道我需要如何构成子查询才能获得所需的结果?
答案 0 :(得分:3)
因此,您希望成员参加不同的活动。会员有参加活动的汽车。由于不同的汽车可以参加相同的活动,因此您需要与其他活动区分开来:
select m.memberId, count(distinct a.eventId)
from members m
join cars c on c.memberId = m.memberId
join attendants a on a.carId = c.carId
group by m.memberId
答案 1 :(得分:0)
不确定是否使用该确切语句,但是语法有几个问题。您正在使用不存在的别名(d.CarID-什么表是d?),并且末尾没有group by语句,该语句告诉引擎您要从中保留值的列。尝试这样的事情:
try {
if (countriesMap.get(indicatorDetail.getiCountryId().getId()) != null) {
System.out.println("if called");
sumOfWeightedIndicator = sumOfWeightedIndicator + countriesMap.get(indicatorDetail.getiCountryId().getId());
sumOfIndicator = sumOfIndicator + (Double.valueOf(indicatorDetail.getiIndicatorValue()) * countriesMap.get(indicatorDetail.getiCountryId().getId()));
retnull = true;
}
} catch (Exception e) {
System.out.println("Exception : " + e);
}
内部查询得到您想要的-通过自己拥有的汽车参加的所有成员的一个大列表,经过重复数据删除,因此,如果他们在同一事件中有两辆汽车,它们只会被记录一次-然后被计入每个成员。