这是我的代码:
SELECT *
FROM Event_list
WHERE interest in
(
SELECT Interest_name
from Interest
where Interest_id in
(
SELECT Interest_id
FROM `User's Interests`
where P_id=Pid and is_canceled=0
)
)
order by count(Eid) desc
我没有使用任何GROUP BY
条款,但仍然只获得一行。删除ORDER BY
子句时,我得到所有正确的行(但顺序不正确)。
我尝试返回按最常见Event_list
(事件ID)排序的视图(名为Eid
),但我希望看到每一行都没有任何分组。
答案 0 :(得分:1)
我怀疑你想要的查询更像是这样:
SELECT el.*,
(select count(*)
from interest i join
UserInterests ui
on ui.is_canceled = 0 and ui.p_id = i.id
where el.interest = i.interest_name
) as cnt
FROM Event_list el
ORDER BY cnt desc;
如果没有样本数据和更好的查询形式,就很难说清楚。一些说明:
WHERE
子句仅进行过滤。您对问题的描述似乎不涉及过滤,只是订购。group by
,则只返回一行。答案 1 :(得分:0)
COUNT()
是一个组函数,因此使用它会自动导致行的分组。这就是为什么在ORDER BY
子句中使用结果时,结果中只有一行。
不幸的是,目前还不清楚你要做什么,所以我不能告诉你如何重写你的查询以获得你想要的结果。
答案 2 :(得分:0)
您可以尝试:
SELECT L.* , C.Cnt
FROM Event_list L
LEFT JOIN (
SELECT E.EID, COUNT(*) AS Cnt
FROM Event_List E
JOIN Interest I
ON E.Interest = I.Interest_name
JOIN `User's Interests` U
ON U.Interest_id = I.Insert_Id
Where U.P_id=Pid and U.is_canceled=0
GROUP BY E.EID
) C
ON E.Eid = C.Eid
Order By Cnt DESC
我没有要测试的表,因此您可能需要更正列名和其他条件。只是提供你的想法。