数据表
name brand_id goods_num
回力 1         2
耐克 2         3目标结果集是 
name brand_id goods_num_rate
回力 1         40%
耐克 2         60%goods_num总共有5个,回力有2个那么 占比例为20%,同理,耐克3个占60%

解决方案 »

  1.   

    select name brand_id concat(goods_num_rate*100/(select sum(goods_num) from tb),%)
    from tb
      

  2.   

    select name,brand_id,
    concat( (goods_num/(select sum(goods_num) from tb))*100,'%') as goods_num_rate
    from tt
      

  3.   

    select name,brand_id,
    concat( (goods_num/aa)*100,'%') as goods_num_ratefrom tt,(select sum(goods_num) as aa from tb) a
      

  4.   

    都不对额,是不是我没有表达清楚???
    表 a 是源表,表b是目标结果集,我想要的结果
    3楼想法是对的,可惜语法在mysql不能通过
      

  5.   

    怎么不能通过,MYSQL 5。.。31
    mysql> SELECT * FROM TTP3;
    +--------+----------+-----------+
    | name   | brand_id | goods_num |
    +--------+----------+-----------+
    | 鍥炲姏   |        1 |         2 |
    | 鑰愬厠   |        2 |         3 |
    +--------+----------+-----------+
    2 rows in set (0.00 sec)mysql> SELECT  NAME,brand_id,
        -> CONCAT( ROUND(ROUND(goods_num/aa,2)*100,0),'%') AS goods_num_rate FROM tt
    p3,(SELECT SUM(goods_num) AS aa FROM ttp3) a;
    +--------+----------+----------------+
    | NAME   | brand_id | goods_num_rate |
    +--------+----------+----------------+
    | 鍥炲姏   |        1 | 40%            |
    | 鑰愬厠   |        2 | 60%            |
    +--------+----------+----------------+
    2 rows in set (0.00 sec)mysql>
      

  6.   

    mysql> SET NAMES GBK;
    Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM TTP3;
    +------+----------+-----------+
    | name | brand_id | goods_num |
    +------+----------+-----------+
    | 回力     |        1 |         2 |
    | 耐克    |        2 |         3 |
    +------+----------+-----------+
    2 rows in set (0.01 sec)mysql> SELECT  NAME,brand_id,
        -> CONCAT( ROUND(ROUND(goods_num/aa,2)*100,0),'%') AS goods_num_rate FROM tt
    p3,(SELECT SUM(goods_num) AS aa FROM ttp3) a;
    +------+----------+----------------+
    | NAME | brand_id | goods_num_rate |
    +------+----------+----------------+
    | 回力     |        1 | 40%            |
    | 耐克    |        2 | 60%            |
    +------+----------+----------------+
    2 rows in set (0.00 sec)mysql>
      

  7.   

    不好意思么有说清楚,用的是临时表。
    发生了can not reopen table a 
    我改物理表试试
      

  8.   

    set names 'gbk' 一下。
      

  9.   

    另外问一下8楼大哥,除了这种查询之外有木有别的办法,比如使用declare声明临时变量 保存sum结果再对临时表做运算的。
      

  10.   

    SELECT SUM(goods_num) INTO @aa FROM ttp3;
    SELECT  NAME,brand_id,CONCAT( ROUND(ROUND(goods_num/@aa,2)*100,0),'%') AS goods_num_rate FROM ttp3
      

  11.   

    or
    SET @aa=(SELECT SUM(goods_num) FROM ttp3);
    SELECT  NAME,brand_id,
         CONCAT( ROUND(ROUND(goods_num/@aa,2)*100,0),'%') AS goods_num_rate FROM ttp3