我有以下代码,我可以通过使用DISTINCT来获得所需的结果,但是有没有办法在不使用DISTINCT的情况下获得相同的结果呢?
SELECT S.name, COUNT(DISTINCT R.peopleID) AS numathletes
FROM Sports S
JOIN Results R ON S.ID = R.sportID
WHERE R.result >= S.record
GROUP BY S.name;
至于我正在使用的表格:
表S具有ID,名称,记录
表R具有人员ID,比赛ID,运动ID,结果
答案 0 :(得分:0)
是的,有可能。
这是一种变体
SELECT name, COUNT(*) AS numathletes
FROM
(
SELECT S.name, R.peopleID
FROM
Sports S
JOIN Results R ON S.ID = R.sportID
WHERE R.result >= S.record
GROUP BY S.name, R.peopleID
) AS T
GROUP BY name;
这是一个更为冗长的变体,可以清楚地显示出计算是如何完成的。
您应该尝试检查您的数据和硬件哪个变种更快。 他们很有可能会执行相同的操作。