Mysql Query选择将一个表中的总和与另一个表中的行总和进行比较的位置

时间:2017-05-20 17:50:00

标签: php mysql

我有两张桌子,每张桌子都有金额。

表一:

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.

3 个答案:

答案 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}}的条件。外部查询将仅选择行直到此。

演示:http://rextester.com/IQDNW80383

答案 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