【问题标题】:Filtering Max Number of Votes each party got for each year in SQL在 SQL 中过滤每一方每年获得的最大投票数
【发布时间】:2021-11-13 22:02:41
【问题描述】:

我有 3 个表,每个表包含 election_id election_year election_type(这是一个 string),party_name(也是一个 stringparty_ID,最后一个是 Results_ID(等于election_id)Results_party(等于party_ID)和最后ballots,我的查询必须返回每个政党多年来获得的最大选票数,例如(也是所需的输出):

Name Year Ballots
Party A 2000 105
Party B 2000 95
Party C 2004 50
Party C 2008 50

我试过了

SELECT Party.party_name,Elections.election_year,Results.Results_ballots
FROM ((Elections 
INNER JOIN Results 
   on Elections.election_ID=Results.Results_Elections 
   AND Elections.election_Type='Regional') 
INNER JOIN Party on Party.party_ID=Results.Results_Party)

但这给了我所有政党和所有选票的所有选举,我想要每个选票的最大选票数 任何想法都值得赞赏,我对 MySQL 很陌生

编辑:也试过这个,错过了表格的最后一行

FROM Party as p, Elections as e, Results as r
where p.party_ID=r.Results_Party and e.election_Type='Regional'  AND r.Results_Elections=e.Elections_ID
group by p.party_name

原来是这样的

Name Year Ballots
Party A 2000 105
Party B 2000 95
Party C 2004 50

【问题讨论】:

  • 请查看文档中的aggregate functions
  • 向我们展示您想要的输出
  • @eshirvana 想要的输出是我在原帖上放的那个
  • @astentx 我确实做到了并且非常接近,但它缺少一个条目,准确地说是原始帖子上的最后一个条目,它属于同一类型,只是不同年份,所以应该采取那些选票数量也相同
  • @Klaudio 你想做2组,GROUP BY p.party_name, e.election_year

标签: mysql sql database


【解决方案1】:

如果我理解正确,你必须做一个子查询来获得每一方的最大值。

这是我想出来的

SELECT * FROM Party c
LEFT JOIN Results b
ON b.Results_party=c.party_ID
AND b.ballots=(SELECT MAX(d.ballots) FROM Results d WHERE d.Results_Party=c.party_ID)
LEFT JOIN Elections a
ON a.Elections_ID=b.Results_ID

【讨论】:

  • 这得到了正确的行,但我似乎无法按感兴趣的列对其进行分组,行在那里
  • 好的,现在我得到了这些列,它仍然说它没有通过一项测试,但我怀疑给我的测试是 janky。但这对我来说似乎很好。感谢您的帮助,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2020-05-03
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多