我因为转动桌子而感到难过,沮丧程度正在上升。我意识到答案可能在我面前,但我找不到它。我已经尝试了case语句,group_concat,子查询都无济于事。
如何获取当前表格...
super_id cat_id qa qb
1 1 5 5
1 2 2 5
1 3 3 4
2 4 5 3
2 5 3 4
2 6 4 2
看起来像这样......
1 2 <--- super_id
qa 3.33 4.00 <--- avg
qb 4.67 3.00
谢谢!
答案 0 :(得分:0)
正如已经提到的,MySQL本身不是为了自行转动而构建的,如果可能的话你应该在代码中进行转换,但是除此之外,下面是一些应该做你想做的SQL示例。假设你的实际表在某种意义上是可变的(比如你有多少q [x]列,或者你有多少super_id),你可以将它包装在一个存储过程中,以动态生成并执行必要的SQL。
假设一个名为testTable的初始表:
mysql> select * from testTable;
+----------+--------+------+------+
| super_id | cat_id | qa | qb |
+----------+--------+------+------+
| 1 | 1 | 5 | 5 |
| 1 | 2 | 2 | 5 |
| 1 | 3 | 3 | 4 |
| 2 | 4 | 5 | 3 |
| 2 | 5 | 3 | 4 |
| 2 | 6 | 4 | 2 |
+----------+--------+------+------+
6 rows in set (0.00 sec)
使用以下SQL:
SELECT
'qa' q,
SUM( CASE WHEN super_id = 1 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
SUM( CASE WHEN super_id = 2 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
FROM
testTable
UNION ALL
SELECT
'qb' q,
SUM( CASE WHEN super_id = 1 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
SUM( CASE WHEN super_id = 2 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
FROM
testTable
;
要达到这个结果:
+----+------------+------------+
| q | super_id_1 | super_id_2 |
+----+------------+------------+
| qa | 3.3333 | 4.0000 |
| qb | 4.6667 | 3.0000 |
+----+------------+------------+
2 rows in set (0.00 sec)
(编辑:格式化)