鉴于下表(如何在此处正确设置格式?)
primary secondary
A a
A b
A b
B a
B a
B b
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用自连接获得比较分组计数。
获得以下结果集很容易:
Primary Secondary Count
A a 1
A b 2
B a 2
B b 1
Run Code Online (Sandbox Code Playgroud)
像这样:
按主要,次要从 foobar 组中选择主要,次要,计数(*)
但我真正想要的是:
Primary Secondary Count Primary Secondary Count
A a 1 B a 2
A b 2 B b 1
Run Code Online (Sandbox Code Playgroud)
当不涉及计数和分组依据时,自联接很简单。但我似乎无法解决这个问题。
“self join AFTER group by”是否使这不可能做到?如果我必须玩临时桌面游戏,我会这样做(尽管我宁愿不这样做),因为真正的目标是单个 sql 块(我可以编写脚本的东西),而不仅仅是一个 select 语句。
目前我正在做前者并手动调整数据。
想法?
嗯……当然,我脑子里的所有东西对我来说都是显而易见的;)
我试图实现的“业务逻辑”是“将“主要 A”中的“次要”计数与“主要 B”中的“次要”计数进行比较,这就是为什么我没有写出 B:B结果集行。但我认为任何将它们放入其中的子句都可以进行过滤。
这应该让你接近。我不确定您如何确定只有“A”主行显示为前几列,所以我无法解释。为什么没有:
B b 1 B b 1
Run Code Online (Sandbox Code Playgroud)
例如?
SELECT
SQ1.primary,
SQ1.secondary,
SQ1.[count],
SQ2.primary,
SQ2.secondary,
SQ2.[count]
FROM
(
SELECT
primary,
secondary,
COUNT(*) AS [count]
FROM
Foobar
GROUP BY
primary,
secondary
) AS SQ1
LEFT OUTER JOIN
(
SELECT
primary,
secondary,
COUNT(*) AS [count]
FROM
Foobar
GROUP BY
primary,
secondary
) AS SQ2 ON SQ2.primary = SQ1.secondary
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7023 次 |
| 最近记录: |