【问题标题】:MySQL get multiple rows into columnsMySQL将多行放入列
【发布时间】:2015-11-17 21:00:01
【问题描述】:

我有一个名为visits 的表,其中concat(s_id, c_id) 是唯一的,id 是主键。 s_id 是网站的 ID 号,c_id 是活动 ID 号。我想显示每个广告系列获得的所有点击量并按网站分组。我希望每个站点都在一行中

  +-----+------+------+------+
  | id  | s_id | c_id | hits | 
  +-----+------+------+------+
  |  1  |   13 |   8  |  245 |
  |  2  |   13 |   8  |  458 |
  |  3  |   13 |   3  |   27 |
  |  4  |   13 |   4  |  193 |
  |  5  |   14 |   1  |  320 |
  |  6  |   14 |   1  |  183 |
  |  7  |   14 |   3  |  783 |
  |  8  |   14 |   4  |  226 |
  |  9  |   5  |   8  |  671 |
  |  10 |   5  |   8  |  914 |
  |  11 |   5  |   3  |  548 |
  |  12 |   5  |   4  |  832 |
  |  13 |   22 |   8  |   84 |
  |  14 |   22 |   1  |   7  |
  |  15 |   22 |   3  |  796 |
  |  16 |   22 |   4  |   0  |
  +----+------+------+-------+

我想要以下结果集:

s_id | hits | hits | hits| hits
 13  | 245  | 458  | 27  | 193
 14  | 320  | 183  | 783 | 226
 5   | 671  | 914  | 548 | 832
 22  | 84   | 7    | 796 | 0

这是我尝试过的,它不会将所有命中列拉回来。

SELECT v.*, v2.* FROM visits v
INNER JOIN visits v2 on v.s_id = v2.s_id
GROUP BY s_id

如何将多行放入列中?

【问题讨论】:

    标签: mysql pivot-table multiple-columns rows


    【解决方案1】:

    如果您的数据集不是非常庞大,而您只是试图将多行作为单行......一种方法......

    SELECT
    s_id, 
    GROUP_CONCAT(hits SEPARATOR ',') as hits_list 
    FROM
    visits
    GROUP BY s_id
    

    由于它不使用任何连接或子查询等,我发现这种方式非常快。

    您可以稍后根据 PHP 或您使用的任何语言中的“,”分隔符拆分/分解数据。

    $hits = explode($hits_list, ','); //get them in an array
    

    【讨论】:

    • 一个简单明了的解决方案。但是,如果我没记错的话,有关网站点击量的数据更有可能是“疯狂的巨大”。我希望看到一种更高效的方法来执行此操作。
    • 通常如果数据量大,可以修改group_concat_max_lenSET SESSION group_concat_max_len = 1000000;
    • 我完全同意。但是您是否知道一种根本不使用GROUP BY 的方法...因为那将是非常糟糕的...!!!
    • 我不知道:(
    • 在这种情况下,我实际上要将此查询加入到其他 3 个表中,但是为了简单起见,我将其保留。这将在管理界面中,因此不会受到太大影响,但一致认为在高流量时,这会有点困难。
    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多