当前位置: 首页 > 面试题库 >

将新输入的行与另一个列值相乘,然后在SQL中找到总和

巫马化
2023-03-14
问题内容

我这里有4个表,我需要将一个表中新输入的行值与另一行相乘,并使用来找到总和CustomerId

客户表

CustomerId Name   EmailId
-------------------------
1          Paul   r@r.com
2          John   J@j.com

LoyaltyPointTable

LoyaltyPointsId LoyaltyType     Points
---------------------------------------
1               Registration       10
2               Loginstatus         1
3               Downloading        10
4               Redemming           1
5               Sharing            20
6               Refer              10

忠诚度详情表

 LoyaltyDetailsId LoyaltyPointsId CustomerId Dates
 -------------------------------------------------
  1                    1            1       2015-01-22 
  2                    2            1       2015-01-22 
  3                    3            2       2015-01-22
  4                    3            1       2015-01-22 
  5                    4            1       2015-01-22
  6                    4            1       2015-01-24 
  7                    5            1       2015-01-24

此查询对每个项目的总和都适用 LoyaltyType

SELECT   
   LoayaltyPointsTable.LoyaltyType,
   COUNT(CustomerTable.CustomerId) AS UserActions,
   SUM(LoayaltyPointsTable.Points) AS TotalPoints 
FROM 
   LoayaltyPointsTable 
JOIN 
   LoyaltyDetailsTable ON LoayaltyPointsTable.LoyaltyPointsId = LoyaltyDetailsTable.LoyaltyPointsId
JOIN
   CustomerTable ON CustomerTable.CustomerId = LoyaltyDetailsTable.CustomerId 
WHERE
   CustomerTable.CustomerId = 1
GROUP BY
   LoyaltyDetailsTable.CustomerId ,LoayaltyPointsTable.LoyaltyType

以下RedeemPointsTable是与以下行的兑换相关的 LoyaltyPointTable

兑换积分表

 RedeemPointsId CustomerId ShopName BillNo Amount
 ------------------------------------------------
 1                   1      Mall x  4757    100
 3                   1      Mall y  SH43    50
 4                   1      Mall x  7743    10
 6                   1      Mall x  s34a    60

我所期待计算总和之前,我想柱Amount(100+50+10+60) * 1RedeemingLoyaltyPointTable与每个总分加入CustomerId

预期产量

LoyaltyType UserActions TotalPoints
-------------------------------------
Downloading     1        10
Loginstatus     1         1
Redemming       4   (100+50+10+60)*1(here using Amount in RedeemPointsTable)
Refer           1        10
Registration    1        10
Sharing         1        20

用户操作计数为4,它基于Amount他输入的RedeemPointsTable

我应该在添加外键列时进行更改RedeemPointsTable吗?还是可以指出我的错误?

任何帮助将是巨大的。


问题答案:

这是返回所需结果的查询:

SELECT 
   LoyaltyPointTable.LoyaltyType, 
   CASE 
      WHEN LoyaltyPointTable.LoyaltyPointsId=4 THEN (SELECT COUNT(amount) FROM RedeemPointsTable where CustomerId=1) 
      ELSE COUNT(CustomerTable.CustomerId) 
   END as UserActions, 
   CASE 
      WHEN LoyaltyPointTable.LoyaltyPointsId=4 THEN (SELECT SUM(amount) FROM RedeemPointsTable where CustomerId=1)*Points
      ELSE SUM(LoyaltyPointTable.Points) 
    END as TotalPoints
FROM 
   LoyaltyPointTable 
JOIN 
   LoyaltyDetailsTable ON LoyaltyPointTable.LoyaltyPointsId =     LoyaltyDetailsTable.LoyaltyPointsId
JOIN
   CustomerTable ON CustomerTable.CustomerId = LoyaltyDetailsTable.CustomerId 
WHERE
   CustomerTable.CustomerId = 1
GROUP BY
   LoyaltyDetailsTable.CustomerId ,LoyaltyPointTable.LoyaltyType

你可以在这里检查



 类似资料:
  • 我想添加每个扇区的不同工作者值,但将该值乘以另一个键:value属性。这是一个vue.js组合API WebApp。

  • 我有一个数据帧df1,其中索引是DatetimeIndex,有5列,col1,col2,col3,col4,col5。 我有另一个df2,它有一个几乎相等的datetimeindex(df1中可能缺少df1的某些天),还有一个“Value”列。 当日期相同时,我想将df1乘以df2的值。但不是所有列的col1。。。col5,只有col1。。。可乐 我可以看到有可能乘以col1*Value,然后乘以

  • 问题内容: 我需要将每个键的值相乘,然后将所有值加在一起以打印一个数字。我知道这可能超级简单,但我被卡住了 在我看来,我可以通过以下方式解决此问题: 但是那样的事情是行不通的:) 问题答案: 如果需要个人,可以使用dict理解: 或直接求和:

  • 我试图计算用户购物车中物品的总成本。我的方法是将项目成本和数量存储在Arraylist中,然后乘以该值再相加。例如,这是我的数组列表。我想做2.00*5.00 3.00*6.00 4.00*7.00 5.00*8.00。到目前为止,我所做的是将第一个数组列表中的第一个数字乘以第二个数组列表的每个项目。这不是我想做的,有人能帮我吗。

  • 我想移动项目从一个表到另一个使用MySQL。 这是我目前使用的: 这是可行的,但是我想在一列中插入多个值,而不是在不同的列中插入每个值。 例如: 在表items_rooms中,我希望将items_phoenix中的值x和y放在items_rooms中的一列中。 如果x=5,y=2,我可以像这样将其保存到items\u房间中:一列:5.2,而不是每个值的不同列吗? 抱歉,如果这是混淆!

  • 问题内容: 我正在尝试用TYPE2中找到的值覆盖TYPE1中找到的值。 我编写了此SQL进行尝试,但是由于某种原因它没有更新: http://www.sqlfiddle.com/#!3/a4733/17 为什么我的TYPE1中的值没有更新? 问题答案: 这对我有用