【问题标题】:SQL selecting content from one table based on another table values as a filterSQL根据另一个表的值从一个表中选择内容作为过滤器
【发布时间】:2022-12-09 22:53:53
【问题描述】:

我有两个表如下:

USERTABLE

USERID   DATE
1        2022-01-01
2        2022-03-01

STOCKTABLE

USERID    DATE        VALUE    APPROVED
1        2020-12-31    100      Y
1        2022-02-01    50       Y
1        2022-03-01    100      N
2        2022-01-01    10       N
2        2022-03-02    20       N
2        2022-03-05    25       Y

我想为USERTABLE中的DATE之后的每个用户选择行数,以及APPROVED事务的VALUES的总和 所以我的结果表应该是这样的

USERID    COUNT    SUM
1          2       50
2          2        25

请注意,我只为每个用户取一行,其中每个用户STOCKTABLE中的DATE大于USERTABLE中的DATEAPPROVED状态为Y

我尝试了内部连接 谢谢!

【问题讨论】:

    标签: sql


    【解决方案1】:

    我们可以在这里使用条件聚合:

    SELECT u.USERID,
           COUNT(*) AS COUNT,
           SUM(CASE WHEN s.APPROVED = 'Y' THEN s.VALUE ELSE 0 END) AS SUM
    FROM USERTABLE u
    INNER JOIN STOCKTABLE s
        ON s.USERID = u.USERID AND
           s.DATE > u.DATE
    GROUP BY u.USERID
    ORDER BY u.USERID;
    

    【讨论】:

      【解决方案2】:

      您可以在 Join ON 子句中进行所有过滤:

      Select u.U_ID, Count(s.U_ID) "COUNT_IDS", Sum(Nvl(S_VAL, 0)) "SUM_VAL"
      From   users u
      Inner Join stocks s ON(s.U_ID = u.U_ID And s.S_DATE > u.U_DATE And s.APPROVED = 'Y')
      Group By u.U_ID
      Order By u.U_ID
      
      
      /*  R e s u l t :
            U_ID  COUNT_IDS    SUM_VAL
      ---------- ---------- ----------
               1          1         50 
               2          1         25
      */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-22
        • 1970-01-01
        相关资源
        最近更新 更多