我有五个表: users,interests,animals,interests_animals,interests_users。
用户foo
利息1、2、3
动物1,2,3
foo有兴趣1,2,3
兴趣%1具有动物% 1,%2兴趣%2具有动物% 1,% 2,%3兴趣%3具有动物%3
我需要返回所有的动物通过利益分组的利益id的foo排序动物计数
我试着这样做:
SELECT animals.* FROM animals
INNER JOIN interests_animals ON animals.id = interests_animals.animal_id
INNER JOIN interests ON interests_animals.interest_id = interests.id
INNER JOIN interests_users ON interests.id = interests_users.interest_id
WHERE interests_users.user_id = XXX
GROUP BY animals.id
ORDER BY COUNT(interests_animals.animal_id);我需要在2,1,3顺序中返回动物,但始终返回1,2,3
发布于 2017-06-23 11:36:48
您需要在SELECT子句中显式指定GROUP BY的列。
SELECT子句的所有其他部分必须是聚合,如count()、sum()等。
请注意,我们使用count(distinct ..)因为由于连接链的原因,每个动物ID可能会出现多次:
SELECT
interests.id,
COUNT(DISTINCT animals.id) as animals_count
JOIN interests_animals ON animals.id = interests_animals.animal_id
JOIN interests ON interests_animals.interest_id = interests.id
JOIN interests_users ON interests.id = interests_users.interest_id
WHERE interests_users.user_id = XXX
GROUP BY 1
ORDER BY 2 desc;--在GROUP BY和ORDER BY中,通常只使用数字比较方便-- "1“表示”SELECT子句的第一列“,等等。
另外,"INNER“是一个可选的关键字( "JOIN”和"INNER JOIN“是一回事)。
另外,作为附注,您可能会发现将以下内容添加到SELECT子句中很有用:
, array_agg(animals.id order by animals.id) as animal_ids--这将为您提供与特定兴趣相关的所有动物ID的整数数组。
https://stackoverflow.com/questions/44712621
复制相似问题