如何使用计数/“分组依据”比较进行自联接?

Mic*_*son 4 sql

鉴于下表(如何在此处正确设置格式?)

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结果集行。但我认为任何将它们放入其中的子句都可以进行过滤。

Tom*_*m H 5

这应该让你接近。我不确定您如何确定只有“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)

  • 顺便说一句,缺少的美元是,在使用 sql 几十年后,我仍然不知道您可以在 from 子句中进行子选择。 (2认同)