【问题标题】:SQL or Subquery if possible without using functions如果可能,不使用函数的 SQL 或子查询
【发布时间】:2016-12-04 08:55:46
【问题描述】:

我在数据库中有一个表,如下所示:-(原始表包含超过 5000 条记录)

n_event_key   n_txn_type_key      n_transaction_amount
1234               4                      6000 
1234               6                      4000
1234               6                      500 
1234               4                      600
1234               4                      200
1235               4                      3000
1235               6                      4000
1235               4                      500
1235               6                      1000
1236               4                      2000
1236               6                      2000
1237               4                      3500
1238               6                      2400

我想要给我以下结果的查询

(i) n_event_key 在哪里

n_txn_type_key(4) 的总计(n_transaction_amount)> n_txn_type_key(6)

n_event_key  n_txn_type_key     total(n_transaction_amount)
1234            4                  6800

(ii)n_event_key

n_txn_type_key(6) 的总计(n_transaction_amount)> n_txn_type_key(4)

n_event_key  n_txn_type_key     total(n_transaction_amount)
1235            6                     5000

(iii)n_event_key

n_txn_type_key(4) 的总计(n_transaction_amount) = n_txn_type_key(6)

n_event_key   n_txn_type_key    total(n_transaction_amount)
1236                 4                 2000
1236                 6                 2000

(iv)n_event_key 只存在于 n_txn_type_key=4

n_event_key   n_txn_type_key      total(n_transaction_amount)
1237             4                      3500   

(v)n_event_key 只存在于 n_txn_type_key=6

n_event_key   n_txn_type_key      total(n_transaction_amount)
1238              6                    2400           

【问题讨论】:

  • 使用 SUM() 分组。
  • 但它向我展示了 4 和 6 的结果......

标签: sql subquery


【解决方案1】:

你应该使用group by和sum,但在此之前,你应该根据n_txn_type_key创建两个子查询,然后比较:

select txn_type_4.n_event_key, txn_type_4.tran_amount from 
(
    select n_event_key, sum(n_transaction_amount) as tran_amount from TABLE_NAME where
    n_txn_type_key = 4 group by n_event_key
) txn_type_4
inner join 
(
    select n_event_key, sum(n_transaction_amount) as tran_amount from TABLE_NAME where
    n_txn_type_key = 6 group by n_event_key
) txn_type_6 on txn_type_4.n_event_key = txn_type_6.n_event_key
where txn_type_4.tran_amount > txn_type_4.tran_amount

此查询适用于 n_txn_type_key(4) > n_txn_type_key(6)。通过更改 where 子句,您可以达到您想要的。

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 2014-02-28
    • 1970-01-01
    • 2020-04-02
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2015-07-04
    相关资源
    最近更新 更多