我现在正在创建一个智能视觉业务的报告服务。
我尝试计算在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%')
这是完全错误的。但我希望它可以给我们提供线索。
答案 0 :(得分:0)
看起来,USER_ID
值是ORG_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等)必须在您的GROUP BY中。
我更新了小提琴,还展示了如果你需要该表中行的元素,你可以如何链接到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;