【问题标题】:Select unique value on one column within multiple table在多个表中的一列上选择唯一值
【发布时间】:2016-09-15 13:59:21
【问题描述】:

我的查询结果如下。请注意,这是在多张桌子上。

EMAIL(A)  PROD_ID(B)   PROD_NAME(B)   CODE(C)
a@a.com   123456       SUNLIGHT A     002
a@a.com   123456       SUNLIGHT B     002
a@a.com   123456       SUNLIGHT C     002
a@a.com   768901       MOON           003
a@a.com   881231       STAR           004   

我的查询如下。

SELECT A.EMAIL, B.PROD_ID, B.PROD_NAME, C.CODE
FROM A
INNER JOIN B ON B.EMAIL = A.EMAIL
INNER JOIN C ON C.CODE = B.CODE
GROUP BY A.EMAIL, B.PROD_ID, B.PROD_NAME, C.CODE
ORDER BY A.EMAIL, C.CODE

我只需要为每个 PROD_ID 获取 1 行数据。我尝试使用MAX(B.PROD_ID) AS "PROD_ID",但我仍然得到PROD_ID 的多行。任何人都可以对此提出建议吗?还是帮帮我?非常感谢!

想要的结果是:

EMAIL(A)  PROD_ID(B)   PROD_NAME(B)   CODE(C)
a@a.com   123456       SUNLIGHT A     002
a@a.com   768901       MOON           003
a@a.com   881231       STAR           004  

感谢任何帮助。谢谢!

【问题讨论】:

    标签: sql oracle oracle-sqldeveloper


    【解决方案1】:

    您需要以某种方式折叠/聚合 PROD_NAME。我使用 MIN 因为它匹配您想要的结果。您可以使用任何适合您的聚合:

    SELECT A.EMAIL, B.PROD_ID, MIN(B.PROD_NAME), C.CODE
    FROM A
    INNER JOIN B ON B.EMAIL = A.EMAIL
    INNER JOIN C ON C.CODE = B.CODE
    GROUP BY A.EMAIL, B.PROD_ID, C.CODE
    ORDER BY A.EMAIL, C.CODE
    

    【讨论】:

    • 谢谢!我一直在尝试使用 MAX,但不知道 MIN 会成功。 :) 非常感谢!
    • 我认为如果 EMAIL 列包含不同的值,此查询将无法正常工作。
    • 我不这么认为。如果您将 MIN 或 MAX 用于其他列(EMAIL、CODE),那么这些列的值将来自不同的行。
    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 2012-02-06
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多