Al_*_*Al_ 9 php mysql sql join greatest-n-per-group
我有两个表(country和ducks),其中country表包含世界上的每个国家/地区,ducks表中有一个duckd列表,其中country_id字段链接到主国家/地区.
我正在试图获得一个只有至少有一只鸭子的国家名单,并且该鸭子表中的单一匹配记录是该国家中评级最高的鸭子.到目前为止,我有:
SELECT *
FROM country c
INNER JOIN ducks d ON c.id = d.country_id
ORDER BY c.country ASC, d.rating DESC
Run Code Online (Sandbox Code Playgroud)
这将返回每个鸭子的列表,而不是每个国家只有一个.
如果有人能指出我正确的方向,我将不胜感激.我宁愿在SQL中执行它而不是为每个国家单独查询以获得最高评级的鸭子.
ype*_*eᵀᴹ 19
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
)
Run Code Online (Sandbox Code Playgroud)
(country_id, rating, id)MyISAM表或(country_id, rating)InnoDB表的索引会有所帮助.
此查询将仅显示duck每个国家/地区一个,即使有多个具有相同的评级.如果你想要出现绑定评级的鸭子,请使用@ imm的GROUP BY答案.
您可以尝试添加选择联接
SELECT c.*, d.*
FROM country c
INNER JOIN ducks d ON c.id = d.country_id
LEFT JOIN ducks d2 ON d.country_id = d2.country_id AND d2.rating > d.rating
WHERE d2.id IS NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9307 次 |
| 最近记录: |