关于#mysql#的问题,如何解决?

如图:

img

mysql数据结构是这样,我想取数据中每天的money字段都大于10000的name字段(名字)也就是说现在数据中只有张三满足,sql咋写

select name from table
group by name having count(1) = sum(case when "money" >10000 then 1 else 0 end )

select name from 表 group by name having min(money)>10000


select name fromwhere money >10000 group by DATE_FORMAT(day,'%Y%m%d'),name

一楼的起始是正解,但是你可能要以天来分组,但是直接分组day肯定不行的,得把day转换成年月日格式的才行,最后还得分以下名称,因为名称可能有多个

取得是每天money都大于10000的name,李四在11号没有大于10000,不返回李四,张三11、12号money值都大于10000,符合条件的只有张三

img


这个应该可以,不过写的有点low,但问题是能解决了
select s1.name from(select COUNT() coun,t1.name from
(
select
name
from
表名
where
money >1000
GROUP by
DATE_FORMAT(day, '%Y%m%d'),
name) t1
group BY
t1.name ) s1 join (select count(
)coun from (select COUNT(*) from 表名 WHERE 1=1 GROUP BY DATE_FORMAT(day,'%Y%m%d'))t1)s2
ON s1.coun=s2.coun

先查到总共有几天时间,再拿查出分组查出>1000的name的数量等于查出的天数

我觉得的话,你应该是要先把名字一样的分为一组,如果一组里面money全都>1000,就输出一个名字。其实和day没有关系(前提是一天之内一个人的名字只有出现一次)

drop table if exists salary ;
create table salary (
 id  int 
 ,name varchar(20)
 ,money int
 ,day  date
);

truncate table salary;

insert into salary values(1,'张三',10010, NOW() );
insert into salary values(2,'李四',11000, NOW() );

insert into salary values(1,'张三',9000, date_add(NOW(),interval -1 day) );
insert into salary values(4,'李四',11000, date_add(NOW(),interval -1 day));

insert into salary values(1,'张三',9000, date_add(NOW(),interval -2 day) );
insert into salary values(4,'李四',11000, date_add(NOW(),interval -2 day));

select * from salary

 
select name  from salary  
group by name  having min(money) > 10000;

数据和思路都在上面,取所有数据中,某个人,它所有的money都是大于 10000 的数据

select name from table where money>10000