【问题标题】:DB Select - Logic MeltdownDB Select - 逻辑崩溃
【发布时间】:2011-09-17 23:31:48
【问题描述】:

我已经为此苦苦挣扎了一段时间。
【样本表】

ITEM  GROUP
----  -----
4     A
7     A
3     A
8     A
7     B
6     B
9     B
0     C
4     C
2     C
5     C
4     C
7     C
5     D
9     D
2     E
7     E
1     E
4     E
7     F
3     F
9     F
6     F
8     G
4     H
5     H
3     H
9     H
0     H
8     H

我需要一个 sql 查询,它会告诉我在 SELECT DISTINCT ITEM 范围内的每个“ITEM”在特定组中彼此出现了多少次。

IE: 第 4 项和第 8 项出现 2 次(A 组和 H 组)。 项目 0 和 4 出现了 2 次(C 组和 H 组)。 第 7、6 和 9 项出现了 2 次(B 组和 F 组)。 ..然后继续。可以忽略仅出现在一组中的“流氓”项目。

可以吗?谢谢

【问题讨论】:

    标签: sql database


    【解决方案1】:

    这适用于成对的物品:

    SELECT T1.item, T2.item, COUNT(*)
    FROM yourTable T1
    JOIN yourTable T2
    ON T1.item < T2.item
    AND T1.group = T2.group
    GROUP BY T1.item, T2.item
    

    【讨论】:

    • 当同一个 ID 在同一个组中出现两次时,这将被过度计数(例如,项目 4 在 C 组中出现两次)。当然,OP没有解释应该如何计算,所以无论如何这可能是正确的。有了明显的重复,甚至不清楚表中是否还有其他列来使行唯一,或者它只是一个堆。
    • @Tom H.:很好,我没有注意到这一点。一种可能的解决方法是创建一个视图 SELECT DISTINCT item, group FROM yourTable 并在上述查询中使用该视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多