请问这样的的数据,能直接用一条sql整出来吗?
如果有的话怎么写、无视掉浏览量那些、也就是一个提问对应着点赞量最高的一条评论
提问和问答是两张表
ans_content 是对应问题点赞最高的一条回答内容,其他需要的信息也查了出来
select a.que_name, a.create_time, a.release_org, a.que_description, a.browse_num, a.praise_num,
(select count(*) from 回答表 where belong_que_id = a.id) as answer_count,
(select ans_content from 回答表 where belong_que_id = a.id
order by ans_praise_num desc limit 0,1
) as ans_content
from 提问表 a
回答表里必须要有问题表的主键,我这里默认回答表存在queid ,sql如下
大概意思就是,先查询提问表,在查询一个回答表,然后对回答表进行group by,取出最高点赞,和外键queid,然后在用最高点赞和外键queid连接回答表(外键加最高赞就可以定义一条回答了),这样就取出全部数据了
这样写的好处是,你想取什么其他字段就直接写字段就行。
select a.*,c.* from 提问表 a inner join
(select max(ans_praise) as ans_praise,queid from 回答表 group by queid) b
on a.Id=b.queid
inner join 回答表 c on b.ans_praise=c.ans_praise and b.queid=c.queid
用的mysql啥版本,看看支不支持"partition"如果支持就简单了
SELECT
tab1.*,tb2.*,
ROW_NUMBER() OVER (partition by tab1.que_id order by tb2.ans_praise_num desc) as row_num
FROM
tab1
INNER JOIN
tb2 ON tab1.que_id = tb2.belong_que_id where row_num=1
提问表t1,答题表t2
select count(ans_praise) cnt from t1 join t2 on t1.que_id =t2.belong_que_id
order by cnt desc limit 1