MySQL将多行转换为列
我有一个名为MySQL将多行转换为列,mysql,pivot-table,multiple-columns,rows,Mysql,Pivot Table,Multiple Columns,Rows,我有一个名为visions的表,其中concat(s\u id,c\u id)是唯一的,而id是主键s_id是网站的id号,c_id是活动id号。我想显示每个活动的所有点击率,并按网站分组。我想在一行上的每个网站 +-----+------+------+------+ | id | s_id | c_id | hits | +-----+------+------+------+ | 1 | 13 | 8 | 245 | | 2 | 13 |
visions
的表,其中concat(s\u id,c\u 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
由于它不使用任何连接或子查询等,我发现这种方法相当快
以后可以根据PHP中的“,”分隔符或您使用的任何语言拆分/分解数据
$hits = explode($hits_list, ','); //get them in an array
一个简单明了的解决方案。然而,如果我没有错的话,关于网站点击率的数据更可能是“疯狂的巨大”。我希望看到一种更高效的方法来实现这一点。通常,如果数据很大,可以修改
组\u concat\u max\u len
<代码>设置会话组\u concat\u max\u len=1000000我完全同意。但是您是否知道有一种方法根本不使用GROUP BY
。。。因为那太棒了。。。!!!并非我所知:(在这种情况下,我实际上要将此查询连接到其他3个表,但是为了简化我的问题,我将其排除在外。这将在管理界面中,因此不会受到太大的影响,但大家一致认为,在高流量下,这将有点困难。