统计参与人数(去掉重复人数)的mysql?

枫叶落 2013-07-25 03:57:17
我的需求如下:

Information (用户表)

字段:id(用户id) ,nickName(nickName),tel(电话),instaltime(时间戳)

Question(发帖表)

字段 id ,content(内容),useId(用户id),instaltime(时间戳)

Reply (回帖表)

字段id,content(回复内容),quesId(发帖id),useId(用户id),instaltime(时间戳)

我要统计的字段:

时间 参与人数 参与比例 发帖数 回帖数
05-12 12 20% 100 200

................................

时间:发帖时间;
参与人数:发帖人或者回帖人 (即发贴又回帖的人算一个人)
参与比例:参与人数除以总人数
发帖数:当天发帖总数
回帖数:当然回帖总数



请大神指教。。。在线等~~~~~~~~
...全文
1657 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2013-07-26
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
枫叶落 2013-07-26
  • 打赏
  • 举报
回复
枫叶落 2013-07-26
  • 打赏
  • 举报
回复
引用 7 楼 tangguangqiang 的回复:

;with sel as(select q.useid as quseid,r.useid as ruseid,convert(varchar(8),q.instaltime,112)
 as qinstaltime,convert(varchar(8),q.instaltime,112)as rinstaltime
from question q join reply r
on a.id=r.quesid and q.useid=r.useid and convert(varchar(8),q.instaltime,112)=
convert(varchar(8),q.instaltime,112)
)
select qinstaltime,count(quseid)+count(ruseid) as total,
(count(quseid)+count(ruseid))/(select count(id) from information) as percen,
count(quseid),count(ruseid) from sel 
group by qinstaltime

自己改一下相对应的列名。
我用的是mysql数据库,我改了对应的列名,执行报错
习惯性蹭分 2013-07-25
  • 打赏
  • 举报
回复

;with sel as(select q.useid as quseid,r.useid as ruseid,convert(varchar(8),q.instaltime,112)
 as qinstaltime,convert(varchar(8),q.instaltime,112)as rinstaltime
from question q join reply r
on a.id=r.quesid and q.useid=r.useid and convert(varchar(8),q.instaltime,112)=
convert(varchar(8),q.instaltime,112)
)
select qinstaltime,count(quseid)+count(ruseid) as total,
(count(quseid)+count(ruseid))/(select count(id) from information) as percen,
count(quseid),count(ruseid) from sel 
group by qinstaltime

自己改一下相对应的列名。
枫叶落 2013-07-25
  • 打赏
  • 举报
回复
引用 5 楼 hdhai9451 的回复:
select	时间=convert(varchar(10),q.instaltime,120),
		参与人数 = (select COUNT(distinct useid) from Reply where quesId=q.id),
		参与比例 = (select COUNT(distinct useid) from Reply where quesId=q.id)/(select COUNT(1) from Information)+'%',
		发帖数	= (select COUNT(1) from Question where convert(varchar(10),instaltime,120)=convert(varchar(10),q.instaltime,120)),
		回帖数	= (select COUNT(1) from Reply where convert(varchar(10),instaltime,120)=convert(varchar(10),q.instaltime,120))	
from Question q 
group by convert(varchar(10),q.instaltime,120)
我把你的改成mysql了,但是数据结果完全对不上
Andy__Huang 2013-07-25
  • 打赏
  • 举报
回复
select	时间=convert(varchar(10),q.instaltime,120),
		参与人数 = (select COUNT(distinct useid) from Reply where quesId=q.id),
		参与比例 = (select COUNT(distinct useid) from Reply where quesId=q.id)/(select COUNT(1) from Information)+'%',
		发帖数	= (select COUNT(1) from Question where convert(varchar(10),instaltime,120)=convert(varchar(10),q.instaltime,120)),
		回帖数	= (select COUNT(1) from Reply where convert(varchar(10),instaltime,120)=convert(varchar(10),q.instaltime,120))	
from Question q 
group by convert(varchar(10),q.instaltime,120)
枫叶落 2013-07-25
  • 打赏
  • 举报
回复
请大神帮忙...
枫叶落 2013-07-25
  • 打赏
  • 举报
回复
引用 1 楼 chwnrthd 的回复:

select	时间=q.instaltime,
		参与人数 = (select COUNT(1) from Information where id=q.useId or id=r.useId),
		参与比例 = (select COUNT(1) from Information where id=q.useId or id=r.useId)/(select COUNT(1) from Information)+'%',
		发帖数	= (select COUNT(1) from Question where id=q.id),
		回帖数	= (select COUNT(1) from Reply where quesId=q.id)	
from Question q 
	INNER JOIN Information i
	ON q.useId=i.id
	INNER JOIN Reply r
	ON r.quesId=q.id
where q.instaltime='2013-05-12'
查询出来没数据
  • 打赏
  • 举报
回复
- - 才发现 mysql`````
  • 打赏
  • 举报
回复

select	时间=q.instaltime,
		参与人数 = (select COUNT(1) from Information where id=q.useId or id=r.useId),
		参与比例 = (select COUNT(1) from Information where id=q.useId or id=r.useId)/(select COUNT(1) from Information)+'%',
		发帖数	= (select COUNT(1) from Question where id=q.id),
		回帖数	= (select COUNT(1) from Reply where quesId=q.id)	
from Question q 
	INNER JOIN Information i
	ON q.useId=i.id
	INNER JOIN Reply r
	ON r.quesId=q.id
where q.instaltime='2013-05-12'

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧