所以这就是我得到的:
users
表
requests
表
我希望SELECT
符合条件(符合条件= 1)和有效(有效= 1)请求数量大于所有符合条件(符合条件= 1)和无效(有效= 0)请求数量的所有用户并且用户发出的所有符合条件的请求数均高于10.
什么SQL查询是最好和最快的实现?
这就是我现在所处的位置 - 它向我展示了有效的和所有的请求,但它绝对不应该是这样 - 太多SELECTS,它的查询速度非常慢......
SELECT U.username,
(SELECT COUNT(R.username) FROM requests AS R
WHERE U.username = R.username AND eligible = 1 AND valid = 1) AS ValidRequests,
(SELECT COUNT(R.username) FROM requests AS R
WHERE U.username = R.username AND eligible = 1) AS AllRequests
FROM users AS U;
答案 0 :(得分:0)
如果我理解了这个问题......
第一个限定符:请求大于所有符合条件(符合条件= 1)和无效(有效= 0)请求的数量
select count(username) from requests where eligible = 1 and valid = 0;
如果此处的数字高于10,则还必须满足“并且用户所做的所有符合条件的请求的数量都高于10”。否则,我们应该将它设置为十。
所以,我认为以下内容符合您的标准:
select username from requests where eligible = 1 and valid = 1 group by username having count(username) > ?
绑定第一个查询的两个值中的较大值或10。
答案 1 :(得分:0)
您可以使用group by
和having
子句表达逻辑。在这种情况下,您可以通过算术操作来模仿布尔逻辑。因此,eligible*valid
仅在请求合格且有效时才为1
。
其余的只是将您的条件转换为适当的逻辑:
select username
from requests
group by username
having sum(eligible) > 10 and
sum(eligible*valid) > sum(eligible*(1-valid));