比较 2 个表中具有 DISTINCT 值的 2 列

  • 本文关键字:DISTINCT 值的 比较 sql
  • 更新时间 :
  • 英文 :


我现在正在创建一个具有可视化业务智能的报告服务。

我尝试计算在org_id下创建了多少用户。

但是该报告由多个org_id组成,我很难计算在该特定org_id下创建了多少。

TBL_USER
USER_ID
0001122
0001234 
ABC9999         
DEF4545
DEF7676
TBL_ORG
ORG_ID
000
ABC
DEF

预期输出

TBL_RESULT
USER_CREATED
000 - 2
ABC - 1
DEF - 2

在我的理解中,我需要嵌套SELECT,但到目前为止我一无所获。

SELECT COUNT(TBL_USER.USER_ID) AS Expr1
FROM TBL_USER INNER JOIN TBL_ORG 
WHERE TBL_USER.USER_ID LIKE 'TBL_ORG.ORG_ID%')

这是完全错误的。但我希望它能给我们提供线索。

看起来

USER_IDORG_ID的串联,也是使其独特的东西。我假设这是来自COTS产品,没有人类会建造的东西。

您的愿望是找出按部门划分的条目数量。在 SQL 中,当您在需求中读到单词 by 时,这意味着分组。您要执行的操作是获取计数,其保留字是 COUNT .除非你需要一些TBL_ORG的东西,否则我认为没有必要加入它

SELECT
    LEFT(T.USER_ID, 3) AS USER_CREATED
,   COUNT(1) AS GroupCount
FROM
    TBL_USER AS T
GROUP BY
    LEFT(T.USER_ID, 3)

不在聚合中的任何内容(COUNT、SUM、AVG 等)都必须位于您的分组依据中。

SQLFiddle

我更新了小提琴,以显示如果您需要该表中行中的元素,如何链接到TBL_ORG。

-- Need to have the friendly name for an org
-- Now we need to do the join
SELECT
    LEFT(T.USER_ID, 3) AS USER_CREATED
,   O.SOMETHING_ELSE
,   COUNT(1) AS GroupCount
FROM
    TBL_USER AS T
    -- inner join assumes there will always be a match
    INNER JOIN
        TBL_ORG AS O
        -- Using a function on a column is a performance killer
        ON O.ORG_ID = LEFT(T.USER_ID, 3)
GROUP BY
    LEFT(T.USER_ID, 3)
,   O.SOMETHING_ELSE;

最新更新