表users结构id   name     money1   txt
1     a        500      1
2     b        200      1
3     c        500      1
4     d        200      1
5     a        600      1
6     b        500      1
7     c        300      1
8     d        100      1
9     a        600      2
10    b        500      2
11    c        300      2
12    d        100      2
13    d        600      2
14    a        100      3
15    b        500      3
16    c        800      3
17    d        900      3
18    c        800      3
我要得出的结果为:
  xtx | name | money1 |
   1  |  a   |  1100  |
   2  |  d   |  700   |
   3  |  c   |  1600  |
只用MYSQL语句,不要在MYSQL语句中加入其他语言如 select * from users where(txt"+i+")

解决方案 »

  1.   

    xtx是什么东西?select name,sum(money1) from uers group by name
      

  2.   

    xtx是我写错了其实是
       txt    ¦   name   ¦   money1   ¦ 
        1     ¦     a    ¦     1100   ¦ 
        2     ¦     d    ¦     700    ¦ 
        3     ¦     c    ¦     1600   ¦ 2楼的语句是不对的,你没有考虑txt的条件了.
      

  3.   

    那你的结果会不会出现同一个name对应两个不同的txt??要得到的结果的规则是什么?
      

  4.   

    这个可以出现呀.
    意思是
    查找txt为1时money1值最大用户的name和money1的总数(也就是把txt=1的相同name的money1相加后,比较看谁最大,然后显示谁)查找txt为2时money1值最大用户的name和money1的总数(也就是把txt=2的相同name的money1相加后,比较看谁最大,然后显示谁)查找txt为3时money1值最大用户的name和money1的总数(也就是把txt=3的相同name的money1相加后,比较看谁最大,然后显示谁)
    看怎么排序才能得出,txt不只是3条,是个很大的数据量!
      

  5.   

    写出来了你也不可能会用的,是一个很长的句来的,数据稍微多一些速度就慢得要死了。本来要得到max值的行就是很复杂的语句,你还要先sum一下。
      

  6.   

    能写出来就好,我想看看,我现在光用MYSQL语句我不会写,加上个for()循环可以得出,但谁写SQL语句还用FOR()呀,那慢的死!大哥请赐教!!!!!!!!就算慢点我想见识下
      

  7.   


    select * from (SELECT txt,name,sum(money1) summoney FROM `users` group by txt,name) as a where not exists(select * from (SELECT txt,name,sum(money1) summoney FROM `users` group by txt,name) as b where b.txt=a.txt and b.summoney>a.summoney);这个试试吧。
      

  8.   

    我测试可以查到!!!
    我有2句SQL麻烦看看怎么组合比较好!我刚用inner join组合还报了错.看看能优化么?请大哥指点!!!
    他们都是查同一张表,都group by home_team_name了他.select * from (SELECT home_team_name,user_name,sum(user_amount) summoney FROM `bets_casino` group by home_team_name,user_name) as a where not exists(select * from (SELECT home_team_name,user_name,sum(user_amount) summoney FROM `bets_casino` group by home_team_name,user_name) as b where b.home_team_name=a.home_team_name and b.summoney>a.summoney)select   count(*), sum(company_part), sum(company_amount), sum(IF(goal_home=3,odds*(1-sole_per-parter_per),amount*(1-sole_per-parter_per))), sum(IF(goal_home=3,odds*(1-sole_per-parter_per)*0.008,amount*(1-sole_per-parter_per)*0.008))  from   bets_casino  where(status=8)group by home_team_name order by home_team_name
      

  9.   

    select txt,max(money1),name from (
    select txt,name,sum(money1) as money1 from users group by txt,name order by money1 desc
    ) as temp   group by txt
      

  10.   

    楼上的,你的方法只要有一组有两个max值是一样的就没法查出来的。
      

  11.   

    这个问题真经典,我还没想到,呵呵!
    8楼的那个方法如果遇到2个一样的是都显示出来是么?
    MYSQL刚接触不久,请各位高手赐教!
      

  12.   

    用那个order   by   money1的把真确的name放在第一位了,因为最外面的那个group by和那个max的函数,所以之后显示每个分组的第一行,这种方法就像那种求单个max值的,先排序,再用个limit 1的那种,速度快很多,唯一缺点就是遇到两个肯定是显示不了的,因为只显示排头的那个。长的那句是直接用逻辑砌的,遇到多少个相同的照样显示,只不过速度就太差了