表中数据如下number   money
111      600
111      100
222      800
333      400$query = $db->query("SELECT  count(*) AS c  FROM test  WHERE stat=0  group by number HAVING SUM(money) >500");$total = $this->db->result($query, 0); 应该出现$total=2条数据。为什么我使用只有$total=1?

解决方案 »

  1.   

    selete count(*) as c from test where money>500
    看下可以不
      

  2.   

    to:a314994403  你上面的运行是可以的出来的。。但是我采用SELECT  count(*) AS c  FROM test  WHERE stat=0  group by number HAVING SUM(money) >500直接在phpadmin中运行
    是出现c
    1
    1
    奇怪。用count(*)统计出来2
      

  3.   

    select count(*), a from test group by a having Sum(b) > 500你的sql是没有问题的,你看看你的result方法,$this->db->result($query, 0); 
    应该是你方法调取内容的问题
      

  4.   

    SELECT  count(*) AS c  FROM test  WHERE stat=0  group by number HAVING SUM(money) >500这条语句你到MYSQL工具中直接运行,你就知道为什么了? 上面这条SQL语句返回两行!估计你要的结果是这个。
    $query = $db->query("select count(*) from (select number from test where stat=0 group by number having sum(money) >500) t");
      

  5.   

    stat字段的值是什么?
    insert into test values
    (111,600),(111,100),(222,800),(333,400);mysql> select count(*) as c
        -> from test
        -> group by number
        -> having sum(money)>500;
    +---+
    | c |
    +---+
    | 2 |
    | 1 |
    +---+
    2 rows in set (0.45 sec)
    --这条语句的意思是查询出每一个number,money的和大于500的记录条数。
      

  6.   

    ACMAIN_CHM兄弟的对了。就是要这样的效果。但是不知道效率如何。如果有100万条数据的话?感谢大家的帮助。。
      

  7.   


    绝对不会快。
    你可以试着加一个 (stat,number) 的复合索引。
      

  8.   

    复合索引怎么加create index idx_xxxxxx on test(stat,number)
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.htmlCREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
        [index_type]
        ON tbl_name (index_col_name,...)
        [index_option] ...index_col_name:
        col_name [(length)] [ASC | DESC]index_type:
        USING {BTREE | HASH | RTREE}index_option:
        KEY_BLOCK_SIZE [=] value
      | index_type
      | WITH PARSER parser_name