我有两个表(“国家/地区”和“鸭子”),其中“国家/地区”表包含世界上每个国家/地区,并且“鸭子”表中有一个鸭子列表,其中有一个country_id字段可链接到主要国家/地区。
我正在尝试获取仅包含至少一只鸭子的国家/地区列表,并从鸭子表中找到该国家内评分最高的鸭子的单个匹配记录。到目前为止,我有:
SELECT * FROM country c INNER JOIN ducks d ON c.id = d.country_id ORDER BY c.country ASC, d.rating DESC
这将返回每只鸭子的列表,而不是每个国家/地区的列表。
如果有人能指出我正确的方向,我将不胜感激。我宁愿在SQL中执行此操作,也不愿为每个国家/地区单独查询以拔出最受好评的鸭子。
SELECT c., d. FROM country c INNER JOIN ducks d ON d.id = — guessing the ducks Primary Key here ( SELECT dd.id — and here FROM ducks dd WHERE c.id = dd.country_id ORDER BY dd.rating DESC LIMIT 1 )
(country_id, rating, id)MyISAM表或(country_id, rating)InnoDB表的索引对您有所帮助。
(country_id, rating, id)
(country_id, rating)
该查询将只显示一个duck国家/地区的一个查询,即使有多个具有相同评级的查询也是如此。如果您希望出现并列等级的鸭子,请使用@imm的GROUPBY答案。
duck
GROUPBY