如何聚合sql查询并在不同的列中显示结果?

qnakjoqk  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(314)

我有一个mysql查询,它从数据库中提取一组记录。我想在我的应用程序中使用稍微不同的聚合方式。当记录集中存在重复行且具有相同的票证价值时,查询将合计估计单位和估计交易价值,并在新列中显示为合计估计单位和合计估计交易价值。如果没有具有相同报价器值的重复项,则应将total \u est \u units显示为est \u units,total \u est \u trans \u value显示为est \u trans \u value。我该怎么做--你能帮我修改这个查询吗?
sql语句:

SELECT 
    oc.*
FROM
order_confirm_daily oc
    INNER JOIN
(SELECT 
    id, ticker, MAX(est_order_time) AS mts
FROM
    order_confirm_daily
WHERE DATE(est_order_time) LIKE '2021-04-26%'
GROUP BY ticker) ds ON ds.ticker = oc.ticker
    AND oc.est_order_time = ds.mts;

样本数据:

期望结果:添加了两个新的派生列“total\u est\u units”和“total\u est\u trans\u value”,仅当多行显示同一个ticker时,才会分别显示est\u units和est\u trans\u value之和——这里是屏幕截图中突出显示的“tna”。

6ss1mwsb

6ss1mwsb1#

我懂了。您只需要窗口功能:

select oc.*,
       sum(est_units) over (partition by ticker) as total_est_units,
       sum(est_trans_value) over (partition by ticker) as total_est_trans_value
from order_confirm_daily oc;

编辑:
在mysql的旧版本中,您将使用 JOIN 以及 GROUP BY :

select *
from order_confirm_daily oc join
     (select ticker, sum(est_units) as total_est_units,
             sum(est_trans_value) as total_est_trans_value
      from order_confirm_daily oc
      group by ticker
     ) oct
     using (ticker);

相关问题