我的数据库中有三个表,请参见下面的结构:
用户
uid | fname | date_joined
---------------------------------
1 | john | 2013-08-25 01:00:00
2 | rock | 2013-08-26 01:00:00
3 | jane | 2013-08-27 01:00:00问题
qid | uid
----------
1 | 1
2 | 1
3 | 2
4 | 3
5 | 3
6 | 1
7 | 1
8 | 2
9 | 2 追随者
fid | qid
---------
1 | 2
2 | 1
3 | 2
4 | 1
5 | 2
6 | 3
7 | 2user表包含所有与用户相关的字段。
“问题”表包含所有具有外键uid的问题相关数据。
“追随者”表存储以下问题的次数的信息。
我希望返回的查询是:
unique uid,
fname
question count for each user
follower count for each user我已经编写了一个查询,它可以正常工作,并按我的要求返回记录,但是关注者计数始终是0。以下是我的疑问:
SELECT
u.uid, u.fname, u.date_joined ,
(SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
(SELECT COUNT(*) FROM followers WHERE followers.qid IN (
SELECT GROUP_CONCAT(qid) FROM questions WHERE questions.uid = u.uid
)
) AS follow_count
FROM epc_user AS u
ORDER BY follow_count DESC, question_count DESC, date_joined DESC我尝试了几种不同的组合,但它们都不起作用,可能是我写错了查询,也可能是不可能在另一个子查询中使用子查询,不管它是什么。我只想知道它是否可能,如果可能
发布于 2013-08-31 09:28:25
GROUP_CONCAT将返回一个字符串,但IN运算符使用的是(一组值),而不是字符串,因此您必须使用以下内容
SELECT
u.uid, u.fname, u.date_joined ,
(SELECT COUNT(*) FROM questions WHERE questions.uid = u.uid) AS question_count,
(SELECT COUNT(*) FROM followers WHERE followers.qid IN (
SELECT qid FROM questions WHERE questions.uid = u.uid
)
) AS follow_count
FROM users AS u
ORDER BY follow_count DESC, question_count DESC, date_joined DESC小提琴:http://sqlfiddle.com/#!2/8cd10/2
发布于 2013-08-31 09:33:48
您可以使用联接来获得结果。不需要子查询:
select
u.uid,
u.fname,
u.date_joined,
count( distinct q.qid ) as 'question_count',
count( distinct f.fid ) as 'follower_count'
from users u
left join questions q on q.uid = u.uid
left join followers f on f.qid = q.qid
group by u.uid, u.fname, u.date_joined
order by follower_count desc, question_count desc, date_joined desc;https://stackoverflow.com/questions/18546327
复制相似问题