mysql分组和计数问题求助

esp5651 2018-07-04 07:29:58
比如我有一组关于投诉的数据,第一列是投诉日期(一共5天),第二列是被投诉人id,想查询出每天都有投诉记录的人
注:每个ID一天可能被投诉多次
我的思路是:先根据日期,id分组,汇总出每天、每个人的被投诉数,然后单独只计数每个人,就能找出count=5的,就是5天均有记录的人。
我最初写的sql是:
select a.id ,count(*) from tousu a inner join
(select *,count(*) from tousu group by dates,id) b
on a.id=b.id
group by a.id,a.dates
having count(*)=5;

这个sql的确能筛选出来,但是count那里出了问题,如果不加having count(*)=5这个条件,发现id为A的一条记录是8,原因可能是某一天A被投诉了两次。但我不太清楚体现在sql上是什么逻辑。
希望大神能分析一下我出现问题的原因,还有正确的sql应该怎么写。

下面是建表的数据:

create table TOUSU
(dates varchar(20) not null,
ID varchar(20) not null);

insert into TOUSU (dates, ID) values ('2018-07-04','A');
insert into TOUSU (dates, ID) values ('2018-07-04','A');
insert into TOUSU (dates, ID) values ('2018-07-04','B');
insert into TOUSU (dates, ID) values ('2018-07-04','C');
insert into TOUSU (dates, ID) values ('2018-07-03','A');
insert into TOUSU (dates, ID) values ('2018-07-03','B');
insert into TOUSU (dates, ID) values ('2018-07-03','E');
insert into TOUSU (dates, ID) values ('2018-07-03','F');
insert into TOUSU (dates, ID) values ('2018-07-02','B');
insert into TOUSU (dates, ID) values ('2018-07-02','C');
insert into TOUSU (dates, ID) values ('2018-07-02','E');
insert into TOUSU (dates, ID) values ('2018-07-02','D');
insert into TOUSU (dates, ID) values ('2018-07-01','A');
insert into TOUSU (dates, ID) values ('2018-07-01','C');
insert into TOUSU (dates, ID) values ('2018-07-01','B');
insert into TOUSU (dates, ID) values ('2018-07-01','T');
insert into TOUSU (dates, ID) values ('2018-06-30','A');
insert into TOUSU (dates, ID) values ('2018-06-30','B');
insert into TOUSU (dates, ID) values ('2018-06-30','C');
insert into TOUSU (dates, ID) values ('2018-06-30','D');
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2018-07-04
  • 打赏
  • 举报
回复
SELECT ID,
COUNT(DISTINCT dates)
FROM TOUSU
GROUP BY ID
HAVING COUNT(DISTINCT dates) >= 5;


jinsenhome 2018-07-04
  • 打赏
  • 举报
回复
select id,count(1)
from (
select distinct dates,id -- 按 日期、投诉人 去重
from tousu
where dates between '2018-06-30' and '2018-07-04' -- 限定查询 的日期范围,和外部查询的 count(1)=5 相呼应
) t
group by id
having count(1)=5 -- 限制查询范围的天数=投诉次数(每天投诉的对应条件)
order by id

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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