mysql行转列效率_如何实现mysql行转列

如何实现mysql行转列

发布时间:2020-06-03 17:28:56

来源:51CTO

阅读:217

作者:三月

下面一起来了解下如何实现mysql行转列,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何实现mysql行转列这篇短内容是你想要的。

原始数据如下:

mysql> select id,sdkname,sid,date,total_count from u1ge_query_log;

+------+----------------+------+------------+-------------+

| id   | sdkname        | sid  | date       | total_count |

+------+----------------+------+------------+-------------+

|  521 | ICC_ICCGAME(3) | 11   | 2017-05-01 |           0 |

|  522 | ICC_ICCGAME(3) | 11   | 2017-05-02 |           0 |

|  523 | ICC_ICCGAME(3) | 11   | 2017-05-03 |           1 |

|  531 | ICC_HUAWEI     | 11   | 2017-05-01 |           0 |

|  532 | ICC_HUAWEI     | 11   | 2017-05-02 |           0 |

|  533 | ICC_HUAWEI     | 11   | 2017-05-03 |           0 |

|  541 | ICC_ICCGAME(0) | 11   | 2017-05-01 |           0 |

|  542 | ICC_ICCGAME(0) | 11   | 2017-05-02 |           0 |

|  543 | ICC_ICCGAME(0) | 11   | 2017-05-03 |           0 |

|  551 | ICC_UC         | 11   | 2017-05-01 |           0 |

|  552 | ICC_UC         | 11   | 2017-05-02 |           0 |

|  553 | ICC_UC         | 11   | 2017-05-03 |           0 |

|  561 | ICC_QIHOO      | 11   | 2017-05-01 |           0 |

|  562 | ICC_QIHOO      | 11   | 2017-05-02 |           0 |

|  563 | ICC_QIHOO      | 11   | 2017-05-03 |           0 |

|  571 | ICC_VIVO       | 11   | 2017-05-01 |           0 |

|  572 | ICC_VIVO       | 11   | 2017-05-02 |           0 |

|  573 | ICC_VIVO       | 11   | 2017-05-03 |           0 |

|  581 | ICC_GIONEE     | 11   | 2017-05-01 |           0 |

|  582 | ICC_GIONEE     | 11   | 2017-05-02 |           0 |

|  583 | ICC_GIONEE     | 11   | 2017-05-03 |           0 |

要求如下显示:

62478e6353d119bd15e9eeb2d328598b.png

此处用到了行转列,由于列不固定,考虑使用动态sqlSET @d=(select GROUP_CONCAT('if(sdkname=\'',sdkname,'\' ,total_count,0) as `',sdkname,'`')

FROM (SELECT DISTINCT sdkname FROM pcik_log_dep.u1ge_query_log ) A);

SET @sql=CONCAT('select date,',@d,'from pcik_log_dep.u1ge_query_log group by date');

PREPARE sdtmt from @sql;

EXECUTE sdtmt;

deallocate prepare sdtmt;

------------+---------+-----------+-------------+------------+------------+----------------+----------------+------------+-----------+----------+-----------+--------+----------+------------+

| date       | icctest | ICC_BAIDU | ICC_COOLPAD | ICC_GIONEE | ICC_HUAWEI | ICC_ICCGAME(0) | ICC_ICCGAME(3) | ICC_LENOVO | ICC_MEIZU | ICC_OPPO | ICC_QIHOO | ICC_UC | ICC_VIVO | ICC_XIAOMI |

+------------+---------+-----------+-------------+------------+------------+----------------+----------------+------------+-----------+----------+-----------+--------+----------+------------+

| 2017-05-01 |       0 |         0 |           0 |          0 |          0 |              0 |              0 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-02 |       0 |         0 |           0 |          0 |          0 |              0 |              0 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-03 |       0 |         0 |           0 |          0 |          0 |              0 |              1 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-04 |       0 |         0 |           0 |          0 |          0 |              0 |           4380 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-05 |       0 |         0 |           0 |          0 |          0 |              0 |           5126 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-06 |       0 |         0 |           0 |          0 |          0 |              0 |           5571 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-07 |       0 |         0 |           0 |          0 |          0 |              0 |           5888 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-08 |       0 |         0 |           0 |          0 |          0 |              0 |           6135 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-09 |       0 |         0 |           0 |          0 |          0 |              0 |           6199 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

| 2017-05-10 |       0 |         0 |           0 |          0 |          0 |              0 |           6199 |          0 |         0 |        0 |         0 |      0 |        0 |          0 |

+------------+---------+-----------+-------------+------------+------------+----------------+----------------+------------+-----------+----------+-----------+--------+----------+------------+

10 rows in set (0.00 sec)

看完如何实现mysql行转列这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的行业资讯栏目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值