简体   繁体   English

sql:如何获取总和

[英]sql : how to get the sum of sums

The below I can get the result of sub_shares, but I don't know how to get the result sum(sub_shares) by using the result of sub_shares for the below code: 下面我可以得到sub_shares的结果,但是我不知道如何通过将sub_shares的结果用于以下代码来获取结果sum(sub_shares):

How to do ? 怎么做 ?

 SELECT * , Client.client_chi_name, Client.client_eng_name, SUM( shares_no ) AS sub_shares FROM Shareholder LEFT OUTER JOIN Client ON Shareholder.client_id = Client.client_id WHERE Shareholder.com_no = 2040628 GROUP BY Shareholder.client_id ORDER BY SUM( shares_no ) DESC, Shareholder.date_of_register DESC 

Table Shareholder 表股东

  • com_no com_no
  • date_of_register 注册日期
  • share_type share_type
  • class_shares class_shares
  • client_id client_id
  • shares_no share_no
  • transferee_id transferee_id
  • currency 货币
  • shares_amount 股份数量

Thank you very much for your help & support. 非常感谢您的帮助和支持。

SELECT * , 
  Client.client_chi_name, 
  Client.client_eng_name, 
  SUM( shares_no ) AS sub_shares,
  (select sum(shares_no) FROM Shareholder
      LEFT OUTER JOIN Client ON Shareholder.client_id = Client.client_id
      WHERE Shareholder.com_no = 2040628) as sum_of_sum
FROM Shareholder
LEFT OUTER JOIN Client ON Shareholder.client_id = Client.client_id
WHERE Shareholder.com_no = 2040628
GROUP BY Shareholder.client_id
ORDER BY SUM( shares_no ) DESC,
Shareholder.date_of_register DESC

You can add just one more column with subselect 您可以使用subselect仅添加一列

you can use below code as per your need, 您可以根据需要使用以下代码,

either 要么

GROUP BY Shareholder.client_id WITH ROLLUP

or 要么

GROUP BY Shareholder.client_id WITH CUBE

For detail understanding, please refer technet 有关详细信息,请参考technet

you can use CTE (Commom Table Expression) to accomplish the same task 您可以使用CTE(公用表表达式)来完成相同的任务

with cte as
(
SELECT * , 
Client.client_chi_name, 
Client.client_eng_name, 
SUM( shares_no ) AS sub_shares
FROM Shareholder
LEFT OUTER JOIN Client ON Shareholder.client_id = Client.client_id
WHERE Shareholder.com_no = 2040628
GROUP BY Shareholder.client_id
ORDER BY shares_no  DESC,
Shareholder.date_of_register DESC
)

select cte.client_chi_name,cte.client_eng_name,SUM(cte.sub_shares) sub_shares from cte   --you can access more column which is present in * 
GROUP BY client_chi_name,client_eng_name --place extra column yor are accessing

You could remove your GROUP BY and do the following: 您可以删除GROUP BY并执行以下操作:

SUM( shares_no ) OVER (PARTITION BY Client.client_id) AS sub_shares
SUM( shares_no ) AS total_shares,

You'd also need to start with SELECT DISTINCT or you'd get duplicates. 您还需要从SELECT DISTINCT开始,否则您将获得重复项。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM