MySQL 将多行变成列

MySQL get multiple rows into columns

我有一个名为 visits 的 table,其中 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

如何将多行变成列?

如果您的数据集不是特别庞大,并且您只是想将多行作为一行来处理......一种方法...

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

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

您稍后可以 split/explode 基于 PHP 中的“,”分隔符或您使用的任何语言的数据。

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