Sql 如何使用GROUPBY编写单个查询以获得以下输出
我有自己的应用程序,可以计算不同支付模式下的总花费。存储数据的数据库如下所示 表创建查询:Sql 如何使用GROUPBY编写单个查询以获得以下输出,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有自己的应用程序,可以计算不同支付模式下的总花费。存储数据的数据库如下所示 表创建查询: CREATE TABLE details (ID int, Fname VARCHAR(255), Lname VARCHAR(255), AmountSpentViaPaytm DECIMAL(10,2), AmountSpentViaGpay DECIMAL(10,2), AmountSpentViaNetB DECIMAL(10,2), AmountSpentViaMobi
CREATE TABLE details
(ID int,
Fname VARCHAR(255),
Lname VARCHAR(255),
AmountSpentViaPaytm DECIMAL(10,2),
AmountSpentViaGpay DECIMAL(10,2),
AmountSpentViaNetB DECIMAL(10,2),
AmountSpentViaMobileB DECIMAL(10,2),
PaymentType VARCHAR(255),
MobileType VARCHAR(255),
PRIMARY KEY(ID));
插入查询示例:
INSERT INTO TABLE details VALUES(1, A, A, 350.00, null, null, null, PAYTM, android);
INSERT INTO TABLE details VALUES(1, B, B, null, 3000.00, null, null, GPAY, android);
我希望输出如下所示:
TotalAmountSpentViaPaytmInAndroid 350.00
CountOfRowsInPaytmInAndroid 1
TotalAmountSpentViaPaytmInIphone 450.00
CountOfRowsInPaytmInIphone 1
TotalAmountSpentViaGpayInAndroid 4500.00
CountOfRowsInGpayInAndroid 2
TotalAmountSpentViaGpayInIphone 0.00
CountOfRowsInGpayInIphone 0
TotalAmountSpentViaNetBInAndroid 4000.00
CountOfRowsInNetBInAndroid 1
TotalAmountSpentViaNetBInIphone 7400.00
CountOfRowsInNetBInIphone 2
TotalAmountSpentViaMobileBInAndroid 4600.00
CountOfRowsInMobileBInAndroid 1
TotalAmountSpentViaMobileBInIphone 0.00
CountOfRowsInPMobileBInIphone 0
count(*),paymentType,MobileType
1,PAYTM, android
1,PAYTM, iphone
2, GPAY, android
goes on...
我需要使用一个查询来获取所有这些数据,因为多个查询变得非常复杂
由于数据库的大小,导致加载到后端。
我曾尝试使用group by语句,但无法找到解决方案
只需一次查询即可解决上述问题
我尝试的命令是:
SELECT COUNT(*), PaymentType, MobileType
from details
group by PaymentType, MobileType;
输出如下所示:
TotalAmountSpentViaPaytmInAndroid 350.00
CountOfRowsInPaytmInAndroid 1
TotalAmountSpentViaPaytmInIphone 450.00
CountOfRowsInPaytmInIphone 1
TotalAmountSpentViaGpayInAndroid 4500.00
CountOfRowsInGpayInAndroid 2
TotalAmountSpentViaGpayInIphone 0.00
CountOfRowsInGpayInIphone 0
TotalAmountSpentViaNetBInAndroid 4000.00
CountOfRowsInNetBInAndroid 1
TotalAmountSpentViaNetBInIphone 7400.00
CountOfRowsInNetBInIphone 2
TotalAmountSpentViaMobileBInAndroid 4600.00
CountOfRowsInMobileBInAndroid 1
TotalAmountSpentViaMobileBInIphone 0.00
CountOfRowsInPMobileBInIphone 0
count(*),paymentType,MobileType
1,PAYTM, android
1,PAYTM, iphone
2, GPAY, android
goes on...
桌子的结构似乎有点奇怪。由于您已经有了付款类型,并且从我看到的情况来看,每行只能存在一种付款类型,因此我希望有一列用于支出,如果是这种情况,可以简单地按PaymentType和MobileType进行分组
SELECT PaymentType, MobileType, COUNT(*) CountOfRows, Sum(spend) Spent
from details
group by PaymentType, MobileType;
但是,由于您有多个列,我们可以在求和之前将它们相加
SELECT PaymentType, MobileType, COUNT(*) CountOfRows,
Sum(coalesce(AmountSpentViaPaytm, 0) +
coalesce(AmountSpentViaGpay, 0) +
coalesce(AmountSpentViaNetB, 0) +
coalesce(AmountSpentViaMobileB, 0)) Spent
FROM details
GROUP BY PaymentType, MobileType;
这不会提供您最初要求的文本输出,但会以易于阅读/解释的方式呈现信息。然后,您可以使用一个表示层来表示它(excel、SSRS等)请不要这样做,然后打开一个新帐户只是为了再次提出相同的问题。澄清原来的问题。@DaleK不得不删除上一个问题。我是这个平台的新手,所以我不知道这些规范。我将更新尝试过的方法。“必须删除前面的问题。”??怎么会?我不知道在什么情况下你必须删除你的问题。@DaleK我收到一条评论说,因为问题的格式无效,所以关闭帖子。即使是这样(这似乎不太可能),你也不应该创建新帐户。