-- 
-- 表的结构 `test`
-- CREATE TABLE `test` (
  `tid` int(10) NOT NULL auto_increment COMMENT '自增',
  `seller_name` varchar(20) collate utf8_unicode_ci NOT NULL COMMENT '卖家名称',
  `buyer_name` varchar(20) collate utf8_unicode_ci NOT NULL COMMENT '买家名称',
  `re` varchar(100) collate utf8_unicode_ci default NULL COMMENT '备注',
  `surplus_amount` float NOT NULL COMMENT '剩余金额',
  PRIMARY KEY  (`tid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='账户明细表' AUTO_INCREMENT=6 ;-- 
-- 导出表中的数据 `test`
-- INSERT INTO `test` (`tid`, `seller_name`, `buyer_name`, `re`, `surplus_amount`) VALUES 
(1, '张三', '李四', '李四2008-01-01向张三账户充值1000元', 1000),
(2, '张三', '李四', '李四2008-01-02向张三账户充值500元', 1500),
(3, '张三', '李四', '李四向张三店铺购物物品话费100元', 2400),
(4, '王五', '李四', '李四2008-01-03向王五账户充值800元', 800),
(5, '李四', '小强', '小强2008-01-04向李四账户充值500元', 500);
我想得到李四在各家店铺的余额,我用这个SQL语句:
select distinct T.seller_name,(select surplus_amount from test as T1 where T1.tid=T.tid) as surplus_amount from test as T where T.buyer_name='李四' group by seller_name order by T.tid asc
得到的是这样的的结果:
seller_name  surplus_amount  
张三             1000 
王五             800
但我想得到的是这样的结果(应该是李四在各家店铺最后的剩余金额):
seller_name  surplus_amount  
张三             2400
王五             800请问应该如何实现?

解决方案 »

  1.   

    -- 
    -- 表的结构 `test`
    -- CREATE TABLE `test` (
      `tid` int(10) NOT NULL auto_increment COMMENT '自增',
      `seller_name` varchar(20) collate utf8_unicode_ci NOT NULL COMMENT '卖家名称',
      `buyer_name` varchar(20) collate utf8_unicode_ci NOT NULL COMMENT '买家名称',
      `re` varchar(100) collate utf8_unicode_ci default NULL COMMENT '备注',
      `surplus_amount` float NOT NULL COMMENT '剩余金额',
      PRIMARY KEY  (`tid`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='账户明细表' AUTO_INCREMENT=6 ;-- 
    -- 导出表中的数据 `test`
    -- INSERT INTO `test` (`tid`, `seller_name`, `buyer_name`, `re`, `surplus_amount`) VALUES 
    (1, '张三', '李四', '李四2008-01-01向张三账户充值1000元', 1000),
    (2, '张三', '李四', '李四2008-01-02向张三账户充值500元', 1500),
    (3, '张三', '李四', '李四向张三店铺购买物品花费100元', 2400),
    (4, '王五', '李四', '李四2008-01-03向王五账户充值800元', 800),
    (5, '李四', '小强', '小强2008-01-04向李四账户充值500元', 500);
      

  2.   

    根据你的需求。
    select distinct T.seller_name,
    (select surplus_amount from test as T1 where T1.tid=T.tid) as surplus_amount 
    from (select * from test order by surplus_amount desc )as T 
    where T.buyer_name='李四' 
    group by T.seller_name order by T.tid asc
      

  3.   

    select a.surplus_amount,a1.surplus_amount from 
    (select max(if(instr(re,'充值')>0,tid,0)) as mcz,
    max(if(instr(re,'花费')>0,tid,0)) as mhf from test 
    where buyer_name='李四' ) b
    left join test a 
    on a.tid=b.mcz
    left join test a1
    on a1.tid=b.mhfor将两个查询UNION
      

  4.   

    建议增加类型字段,用来记录充值、花费,用SQL语句可以直接查询出来结余