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
我有一个名为 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