如图:
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 from 表 where money >10000 group by DATE_FORMAT(day,'%Y%m%d'),name
一楼的起始是正解,但是你可能要以天来分组,但是直接分组day肯定不行的,得把day转换成年月日格式的才行,最后还得分以下名称,因为名称可能有多个
取得是每天money都大于10000的name,李四在11号没有大于10000,不返回李四,张三11、12号money值都大于10000,符合条件的只有张三
day
, '%Y%m%d'),day
,'%Y%m%d'))t1)s2先查到总共有几天时间,再拿查出分组查出>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