求助一个 sql 写法, 一个表, 只有 2 个字段

2021-01-26 17:42:58 +08:00
 DinoStray

有个表, 只有两个字段 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 次
1645 次点击
所在节点    数据库
12 条回复
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
```
不知道满足要求不。~?
DinoStray
2021-01-26 18:03:07 +08:00
@ynwcel 谢谢哈, 不满足, 因为问题被我极度简化了, 实际取值范围其实是很大的
DinoStray
2021-01-26 18:04:01 +08:00
@ynwcel 所以希望不能 a=1 2 3 这种写死的, 最好能变量另一个结果集
liprais
2021-01-26 18:06:15 +08:00
你要的不就是 a,b,count(*)么?
ttys001
2021-01-26 19:52:43 +08:00
select a, count(distinct b) from table group by a;
ttys001
2021-01-26 19:54:36 +08:00
@ttys001 select a, b, count(distinct b) from table group by a;
asAnotherJack
2021-01-26 20:53:04 +08:00
select a,b,count(*) from t group by a,b;
这样有什么问题吗
xuanbg
2021-01-26 21:02:09 +08:00
7 楼应该是对的
Still4
2021-01-26 21:31:59 +08:00
一般 sql 做动态二维表有点难吧,考虑存储过程,或者读出来外部程序单独处理
zlowly
2021-01-27 09:44:47 +08:00
应该就是 7 楼的统计方式就行了,除非楼主希望的数据展现方式不同,难道是横轴为 a 的取值集合,竖轴为 b 的取值集合这种不定宽表格?
cslive
2021-01-27 14:25:17 +08:00
7 楼是可以得,如果横排少可以再用 case when 转一下,前段时间我这样竖转横搞了几张表,转了几十列
DinoStray
2021-01-27 18:21:12 +08:00
@asAnotherJack 没问题, 就要这个, 我对 sql 不熟悉没想到, 谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX