time    |   count 
------------------
2012-03-01,1
2012-03-02,1
2012-03-03,2
现在要查出3个列中,count列与sum(count)的比例sum(count)=4,所以最后结果要这样time    |   count 
------------------
2012-03-01,0.25
2012-03-02,0.25
2012-03-03,0.50怎么查?求助高手啊!
select id,time,count/sum(count) from table;
这个返回来的结果只有一行
time    |   count 
------------------
2012-03-01,0.25
select id,time,count/sum(count) from table group by time;
这个返回来的结果是
time    |   count 
------------------
2012-03-01,1.0
2012-03-02,1.0
2012-03-03,1.0
实在想不出还有什么其他什么方法来处理了

解决方案 »

  1.   

    SELECT time , (count / ( SELECT SUM( count ) FROM table)) AS t FROM  table 
      

  2.   

    select a.id,a.time,a.count/b.total
    from table a ,(select sum(count) as total from table) b  ;
      

  3.   

    不知道mysql是不是会优化 amani11 的语句以避免执行多次子查询?版主的用法我还真是没想到过,平时都是用临时变量来做类似的操作:
    select @total := sum(count) from a;
    select a.time, a.count / @total
    from a;
      

  4.   

    你可以explain一下看看执行计划
      

  5.   


    嗯,试过了,版主的居然显示没有子查询,不过explain结果均有两个查询,影响行数都为 3。从结果我还是没看出有没有优化。附:
    [code]
    mysql> use testtest;
    Database changed
    mysql> explain
        -> select a.time, a.num/b.total
        -> from a ,(select sum(num) as total from a) b ;
    +----+-------------+------------+--------+---------------+------+---------+-----
    -+------+-------+
    | id | select_type | table      | type   | possible_keys | key  | key_len | ref
     | rows | Extra |
    +----+-------------+------------+--------+---------------+------+---------+-----
    -+------+-------+
    |  1 | PRIMARY     | <derived2> | system | NULL          | NULL | NULL    | NULL
     |    1 |       |
    |  1 | PRIMARY     | a          | ALL    | NULL          | NULL | NULL    | NULL
     |    3 |       |
    |  2 | DERIVED     | a          | ALL    | NULL          | NULL | NULL    | NULL
     |    3 |       |
    +----+-------------+------------+--------+---------------+------+---------+-----
    -+------+-------+
    3 rows in set (0.00 sec)mysql> explain
        -> SELECT time , num   /  (SELECT SUM(num)    FROM a)
        -> FROM a;
    +----+-------------+-------+------+---------------+------+---------+------+-----
    -+-------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows
     | Extra |
    +----+-------------+-------+------+---------------+------+---------+------+-----
    -+-------+
    |  1 | PRIMARY     | a     | ALL  | NULL          | NULL | NULL    | NULL |    3
     |       |
    |  2 | SUBQUERY    | a     | ALL  | NULL          | NULL | NULL    | NULL |    3
     |       |
    +----+-------------+-------+------+---------------+------+---------+------+-----
    -+-------+
    2 rows in set (0.00 sec)mysql>
    [/code]
      

  6.   

    mysql> use testtest;
    Database changed
    mysql> explain
        -> select a.time, a.num/b.total
        -> from a ,(select sum(num) as total from a) b ;
    +----+-------------+------------+--------+---------------+------+---------+-----
    -+------+-------+
    | id | select_type | table      | type   | possible_keys | key  | key_len | ref
     | rows | Extra |
    +----+-------------+------------+--------+---------------+------+---------+-----
    -+------+-------+
    |  1 | PRIMARY     | <derived2> | system | NULL          | NULL | NULL    | NULL
     |    1 |       |
    |  1 | PRIMARY     | a          | ALL    | NULL          | NULL | NULL    | NULL
     |    3 |       |
    |  2 | DERIVED     | a          | ALL    | NULL          | NULL | NULL    | NULL
     |    3 |       |
    +----+-------------+------------+--------+---------------+------+---------+-----
    -+------+-------+
    3 rows in set (0.00 sec)mysql> explain
        -> SELECT time , num   /  (SELECT SUM(num)    FROM a)
        -> FROM a;
    +----+-------------+-------+------+---------------+------+---------+------+-----
    -+-------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows
     | Extra |
    +----+-------------+-------+------+---------------+------+---------+------+-----
    -+-------+
    |  1 | PRIMARY     | a     | ALL  | NULL          | NULL | NULL    | NULL |    3
     |       |
    |  2 | SUBQUERY    | a     | ALL  | NULL          | NULL | NULL    | NULL |    3
     |       |
    +----+-------------+-------+------+---------------+------+---------+------+-----
    -+-------+
    2 rows in set (0.00 sec)mysql>