mysql 如何将3个表中的信息连接到1列中?

bf1o4zei  于 2023-01-08  发布在  Mysql
关注(0)|答案(2)|浏览(130)

我有3表狗,品种和参赛作品。我需要得到平均值(得分)从参赛作品,名称从狗和名称品种。
我已经成功地将2个表连接在一起,但我很难将最后一个对象(breeds.name)附加到表中

SELECT AVG(score), dogs.name, dogs.breed_id
FROM entries  
JOIN dogs
    ON entries.dog_id = dogs.id
JOIN breeds
    ON breeds.id = dogs.breed_id
GROUP BY breeds.name, dogs.name, dogs.breed_id 
having count(entries.dog_id) > 1 
order by AVG(score) DESC 
LIMIT 10

当前结果:

如何将breed_id改为breed.name

ybzsozfc

ybzsozfc1#

考虑到您需要来自品种的名称、来自狗的名称和来自条目的AVG(得分),下面的SQL应该可以做到这一点。

SELECT breeds.name, dogs.name, AVG(score)
FROM entries  
JOIN dogs ON entries.dog_id = dogs.id
JOIN breeds ON breeds.id = dogs.breed_id
GROUP BY breeds.name, dogs.name
order by AVG(score) DESC 
LIMIT 10
g9icjywg

g9icjywg2#

您已经在问题中回答了自己的问题。您所需要做的就是将dogs.breed_id替换为breeds.name。由于这将在结果集中留下两个名为name的列,因此您应该为它们添加别名以使其更清楚。
假设id列被定义为PRIMARY KEY,您可以使用GROUP BY dogs.id(或entries.dog_id),因为两个非聚集列(dogs.name和breeds.name)在功能上都依赖于dogs.id。

SELECT AVG(e.score) avg_score, d.name dog_name, b.name breed_name
FROM entries e
JOIN dogs d ON e.dog_id = d.id
JOIN breeds b ON b.id = d.breed_id
GROUP BY d.id
HAVING COUNT(e.dog_id) > 1
ORDER BY avg_score DESC 
LIMIT 10

相关问题