【发布时间】:2020-06-06 07:10:47
【问题描述】:
场景:
下面是我的桌子。
+-------+-----------+--------+--------+
|col2 |col3 |col4 |col5 |
+-------+-----------+--------+--------+
| 1.0| 2| a| a1|
| 1.0| 1| a| a2|
| 1.0| 2| b| a3|
| 2.0| 1| a| a1|
| 2.0| 1| a| a2|
+-------+-----------+--------+--------+
我需要得到如下聚合结果。
+-------+-----------+-----------+-----------+-----+
|col2 |col3 | field_name|field_value|count|
+-------+-----------+-----------+-----------+-----+
| 2.0| 1| col3 | 1| 2|
| 1.0| 1| col3 | 1| 1|
| 1.0| 2| col3 | 2| 2|
| 2.0| 1| col4 | a| 2|
| 1.0| 1| col4 | a| 1|
| 1.0| 2| col4 | a| 1|
| 1.0| 2| col4 | b| 1|
| 1.0| 1| col5 | a2| 1|
| 1.0| 2| col5 | a1| 1|
| 1.0| 2| col5 | a3| 1|
| 2.0| 1| col5 | a1| 1|
| 2.0| 1| col5 | a2| 1|
+-------+-----------+-----------+-----------+-----+
已实施的解决方案:
我通过创建三个不同的表 [T1、T2、T3] 来实现该解决方案。 然后对于每个表,我以编程方式创建了 [rowset1, rowset2, rowset3] 以将所有表合并到一个表中
select col2, col3, col3, count(*) from calc group by col2, col3;
T1 :
|col2 |col3 |col3 |count|
+-------+-----------+-----------+-----+
| 2.0| 1| 1| 2|
| 1.0| 1| 1| 1|
| 1.0| 2| 2| 2|
+-------+-----------+-----------+-----+
rowset1 = [[2.0,1,col3,1,2,18000], [1.0,1,col3,1,1,18000], [1.0,2,col3,2,2,18000]]
select col2, col3, col4, count(*) from calc group by col2, col3, col4;
T2:
+-------+-----------+--------+-----+
|col2 |col3 |col4 |count|
+-------+-----------+--------+-----+
| 2.0| 1| a| 2|
| 1.0| 1| a| 1|
| 1.0| 2| a| 1|
| 1.0| 2| b| 1|
+-------+-----------+--------+-----+
rowset2 = [[2.0,1,col4,a,2,18000], [1.0,1,col4,a,1,18000], [1.0,2,col4,a,1,18000],[1.0,2,col4,b,1,18000]]
select col2, col3, col5 , count(*) from calc group by col2, col3, col5;
T3:
+-------+-----------+--------+-----+
|col2 |col3 |col5 |count|
+-------+-----------+--------+-----+
| 1.0| 1| a2| 1|
| 1.0| 2| a1| 1|
| 1.0| 2| a3| 1|
| 2.0| 1| a1| 1|
| 2.0| 1| a2| 1|
+-------+-----------+--------+-----+
rowset3 = [1.0,2,col5,b,1,18000], [1.0,1,col5,a2,1,18000], [1.0,2,col5,a1,1,18000], [1.0,2,col5,a3,1,18000], [2.0,1,col5,a1,1,18000], [2.0,1,col5,a2,1,18000]]
问题:
如何在 SQL 中实现相同的功能,而无需创建 rowset1、2、3 并将其组合到单个表中?
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
-
它对所有人都是通用的,但我已经标记了它。
-
相信你在找pivot函数
-
@Singh。 . .一点也不。您正在运行查询。这些查询是针对数据库运行的。该数据库的功能不同于现有的所有其他数据库。
标签: mysql sql group-by aggregation