【问题标题】:SQL SUM() function with parameters returned by query for each rowSQL SUM() 函数,每行查询返回的参数
【发布时间】:2016-09-27 23:14:13
【问题描述】:

首先,很抱歉这个奇怪的标题。事情是这样的: 我在一家在线商店工作,该商店在亚马逊上销售产品。由于我们销售不同商品的套装,因此我们将多套商品中的相同商品发送到亚马逊 FBA。为了给出所有集合中一项的总和,我编写了以下查询:

SELECT
  SUM(nQuantity)
  AS [total]
FROM [amazon_fba]
INNER JOIN (SELECT
  [cArtNr]
FROM [tArtikel]
INNER JOIN (SELECT
  [kStueckliste]
FROM [tStueckliste]
WHERE [kArtikel] = (SELECT
  [kArtikel]
FROM [tArtikel]
WHERE [cHAN] = 12345)) [bar]
  ON [tArtikel].[kStueckliste] = [bar].[kStueckliste]) [foo]
  ON [amazon_fba].[cSellerSKU] = [foo].[cArtNr]

cHAN=12345 部分仅用于选择一个我们想知道项目总数的特定项目。这个查询本身工作正常,所以这不是问题。

不过,我也知道所有属于套装的产品都有[tArtikel].[kStueckliste]=0,理论上这使得识别它们变得非常容易。这让我想到,我可以使用此查询立即生成所有这些产品的列表及其各自的总数,例如:

kArtikel | total
=================
   01234 | 23
   56789 | 42

所以基本上我需要类似的东西

foreach (
    select [kArtikel]
    from [tArtikel]
    where [tArtikel].[kStueckliste]=0
) do (
    < the query I made >
)

因此我尝试了以下语句:

SELECT
  SUM(nQuantity)
  AS [total]
FROM [amazon_fba]
INNER JOIN (SELECT
  [cArtNr]
FROM [tArtikel]
INNER JOIN (SELECT
  [kStueckliste]
FROM [tStueckliste]
INNER JOIN (SELECT
  [kArtikel]
FROM [tArtikel]
WHERE [tArtikel].[tStueckliste] = 0) [baz]
  ON [tStueckliste].[kArtikel] = [baz].[kArtikel]) [bar]
  ON [tArtikel].[kStueckliste] = [bar].[kStueckliste]) [foo]
  ON [amazon_fba].[cSellerSKU] = [foo].[cArtNr]

这并没有像我希望的那样返回总和列表,而是给了我想要创建的所有总和的总和。 由于我对 SQL 很陌生(大约两周后),我既不知道该做什么,也不知道我的错误在哪里,也不知道我应该使用什么措辞来搜索我的方式——因此这篇文章的标题很奇怪。因此,如果有人可以帮助我和/或指出我正确的方向,我会非常高兴:)

【问题讨论】:

    标签: sql-server database join sum


    【解决方案1】:

    我写的是 MySQL 而不是 SQL,但我相信除了一些函数和语法之外,它非常相似。以下是我认为应该适合你的方法:

    select am.cArtNr, sum(am.nQuantity) as total
    from amazon_fba am
    join tArtikel ar on ar.cArtNr=am.cArtNr
    join tStueckliste st on st.kStueckliste=ar.kStueckliste
    where ar.kStueckliste=0
    group by am.cArtNr;
    

    添加分组依据将按文章进行拆分,但如果您使用索引,减少括号的数量(在本例中为派生表)将加快查询速度。再说一次,这就是我在 MySQL 中的做法,而我使用过的唯一其他查询语言是 BigQuery,这在这里无济于事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 2018-04-09
      • 2013-12-31
      • 1970-01-01
      • 2011-09-27
      相关资源
      最近更新 更多