有个表, 只有两个字段 a, b, 取值范围都是 1- 3
现在我想统计, 遍历 a 的每个值, 对应的 b 每个值出现次数
列 a=1 a=2 a=3
b=1 b=1 出现 3 次 b=1 出现 2 次 b=1 出现 2 次
b=2 b=2 出现 0 次 b=2 出现 1 次 b=2 出现 2 次
b=3 b=3 出现 1 次 b=3 出现 1 次 b=3 出现 8 次
1
ynwcel 2021-01-26 17:52:43 +08:00
```sql
select b, (select count(*) from <table> where a = 1 and b = outa.b) as a1, (select count(*) from <table> where a = 2 and b = outa.b) as a2, (select count(*) from <table> where a = 3 and b = outa.b) as a3 from (select distinct b from <table>) as outa ``` 不知道满足要求不。~? |
4
liprais 2021-01-26 18:06:15 +08:00 1
你要的不就是 a,b,count(*)么?
|
5
ttys001 2021-01-26 19:52:43 +08:00
select a, count(distinct b) from table group by a;
|
7
asAnotherJack 2021-01-26 20:53:04 +08:00
select a,b,count(*) from t group by a,b;
这样有什么问题吗 |
8
xuanbg 2021-01-26 21:02:09 +08:00
7 楼应该是对的
|
9
Still4 2021-01-26 21:31:59 +08:00
一般 sql 做动态二维表有点难吧,考虑存储过程,或者读出来外部程序单独处理
|
10
zlowly 2021-01-27 09:44:47 +08:00
应该就是 7 楼的统计方式就行了,除非楼主希望的数据展现方式不同,难道是横轴为 a 的取值集合,竖轴为 b 的取值集合这种不定宽表格?
|
11
cslive 2021-01-27 14:25:17 +08:00
7 楼是可以得,如果横排少可以再用 case when 转一下,前段时间我这样竖转横搞了几张表,转了几十列
|
12
DinoStray OP @asAnotherJack 没问题, 就要这个, 我对 sql 不熟悉没想到, 谢谢
|