我有两张桌子,每张桌子都有金额。
表一:
id | name | amount
1 | Dana Johnson | 40
2 | Mary James | 20
3 | Mark Lucas | 10
表二:
id | purchase_id | amount
1 | max | 25
2 | James | 15
2 | Dane | 10
所以我想选择表 一个上的第一批用户,其总和等于表二上的金额总和。
即。如果前两个用户的总和等于表2中金额的总和;所以它应该返回两个用户只留下最后一个。
我需要MySQL查询,因为我不知道它的语法。
结果 可以返回
id | name | amount
1 | Dana Johnson | 40
2 | Mary James | 20
假设表2中的总金额为60,则选择第1行和第2行,因为它们的总和等于60.
答案 0 :(得分:0)
select *
from table1
where id <= (
select a.id
from table1 a
join table1 a1 on a1.id <= a.id
group by a.id
having sum(a1.amount) >= (select sum(amount) from table2)
order by a.id
limit 1
)
子查询将返回第一行的id,其满足所有先前行(包括其自身)的金额总和大于或等于sum(amount)
的{{1}}的条件。外部查询将仅选择行直到此。
答案 1 :(得分:0)
declare @id int
declare @name nvarchar(200)
declare @amount decimal(18,2)
delcare @amounttocompare decimal(18,2)
set @amounttocompare =0
declare @totalamount decimal(18,2)
select @totalamount =sum(amount) from tabletwo
create table #tempTable
(
id int,
name nvarchar(200),
amount decimal(18,2)
)
DECLARE mycursor CURSOR FOR Select id, name, amount FROM tableone
OPEN mycursor
FETCH NEXT FROM mycursor INTO @id, @name, @amount
WHILE @@FETCH_STATUS = 0
BEGIN
if @amounttocompare>@totalamount
begin
break
end
@amounttocompare= @amounttocompare +@amount
inset into #tempTable values(@id,@name,@amount)
FETCH NEXT FROM mycursor INTO @id, @name, @amount
END
CLOSE mycursor
DEALLOCATE mycursor
select * from #temptable
这可能有一些错误,但这是我早上喝咖啡时可以出现的。
答案 2 :(得分:-1)
$first = SELECT SUM(amount) FROM table2
$second = SELECT * FROM table1 WHERE amount >= $first