可以创建这样的MySQL查询吗?
我有两张桌子。我想创建一个查询,它返回一个表中的所有行,其中表中列的整数值之和小于特定值 想象一下这些桌子是这样的:可以创建这样的MySQL查询吗?,mysql,sql,Mysql,Sql,我有两张桌子。我想创建一个查询,它返回一个表中的所有行,其中表中列的整数值之和小于特定值 想象一下这些桌子是这样的: 账户: USERID | STATUS | LAST_LOGIN_DATE | etc...... 4594 . 1 . XX/XX/XX 00:00:00 . etc..... 2414 . 1 . XX/XX/XX 00:00:00 . etc..... 1894 . 1 . XX/XX/XX 00:00:00 . etc..... 历史记录: USERID | VALUE
账户
:
USERID | STATUS | LAST_LOGIN_DATE | etc......
4594 . 1 . XX/XX/XX 00:00:00 . etc.....
2414 . 1 . XX/XX/XX 00:00:00 . etc.....
1894 . 1 . XX/XX/XX 00:00:00 . etc.....
历史记录
:
USERID | VALUE | DATE
4594 . 10000 . XX/XX/XX 00:00:00
2414 . 10000 . XX/XX/XX 00:00:00
1894 . 10000 . XX/XX/XX 00:00:00
6974 . 10000 . XX/XX/XX 00:00:00
3491 . 10000 . XX/XX/XX 00:00:00
1590 . 10000 . XX/XX/XX 00:00:00
6554 . 10000 . XX/XX/XX 00:00:00
我想
从Accounts
中选择Accounts.*但条件是,例如,对于每个userid
,值
列小于例如30000
。这在MySQL中可能吗?谢谢。你想要什么
select a.*
from accounts a
where not exists (select 1
from history h
where h.userid = a.userid and h.value >= 30000
);
您提到
列的和值小于30000,对吗
select a.*
from accounts a
where (
select sum(h.value)
from history h
where h.userid = a.userid
) < 30000
您可以使用以下查询:
select accounts.* from accounts inner join history on history.userid = accounts.userid where history.value >= 30000
希望它对您有所帮助。历史记录中没有重复项。那么,什么是“整数值之和”?请更具体一些,编辑你的问题。是的,我做了,谢谢。不过我有一个问题,我试图使用您建议的第一个查询,但我想在内部select语句中添加另一个条件,即date>=date\u SUB(CURDATE(),INTERVAL 0 DAY),因为我只从当天的和中提取。但是,当我添加此项时,没有返回任何行。由于我今天没有添加任何行,总和应该等于0,这将小于30000,因此应该返回给我所有用户/帐户行@对于Pasno,你不能通过在那里应用这个条件来做到这一点。条件date>=date\u SUB(CURDATE(),INTERVAL 0 DAY)
不会对不存在的行的列value
求和,因此不会得到结果0。如果不存在,是否可以将其设置为零?修复了,我在select语句中使用了一个案例。
select *
from accounts
where userid not in (
select userid
from history
where date >= date_sub(curdate(), interval 0 day)
group by userid
having sum(value) >= 30000
)
select accounts.* from accounts inner join history on history.userid = accounts.userid where history.value >= 30000