SQL 的问题:组合 JOIN、SUM 和 MAX

Problem with SQL: combining a JOIN, SUM and MAX

我想构建一个查询,为我提供在其议员中获得最多选票的政党名称。

数据库的构建方式如下: 聚会(PartyID、NameParty、StartDate、AmountofSeats) 议员(LidID、NameCouncilor、Council、Party、AmountofVotes)

议员中的派对 = PartyID 派对中的派对。

我写了以下查询,但都无法为我提供正确的派对名称。 谁能帮帮我:我做错了什么?

这段代码给我取错了党名(这不是总票数最高的)。

SELECT s.NameParty, s.SumVotes
    FROM (SELECT Party.NameParty, SUM(Councilors.AmountofVotes) SumVotes, Party.PartyID, Council.Party
        FROM Councilors
        JOIN Party on Party.PartyID = Councilors.Partij
        GROUP BY Party.PartyID) s
        WHERE s.SumVotes = (SELECT MAX(AmountofVotes)
                        FROM Councilors w1
                        WHERE w1.Party = s.PartyID);

尝试 2:此代码给我一个与 >= ALL 有关的错误,但我不明白为什么。

 SELECT s.NameParty, s.SumVotes
    FROM (SELECT Party.NameParty, SUM(Councilors.AmountofVotes) SumVotes, Party.PartyID, Councilors.Party
        FROM Councilors
        JOIN Partij on Party.PartyID = Councilors.Party
        GROUP BY Party.PartyID) s
        HAVING SUM(Councilors.AmountofVotes) >= ALL (
                SELECT SUM(Councilors.AmountofVotes) 
                FROM Councilors
                WHERE Councilors.Party = s.PartyID)

现在是学习解析函数的好时机。在此处使用 RANK()

WITH cte AS (
    SELECT p.PartyId, p.NameParty, SUM(c.AmountofVotes) SumVotes,
           RANK() OVER (ORDER BY SUM(c.AmountofVotes) DESC) rnk
    FROM Party p
    INNER JOIN Councilors c ON p.PartyID = c.Party
    GROUP BY p.PartyID, p.NameParty
)

SELECT PartyId, NameParty, SumVotes
FROM cte
WHERE rnk = 1;

请注意,这种方法简洁明了,而且对于两个或多个得票最多的政党之间的联系可能性也很稳健。