使用多个 WHERE 语句将 Table 与其自身连接起来

Joining a Table with Itself with multiple WHERE statemetns

好久了reader,第一次发贴。

我正在尝试合并 table 我必须了解所售商品在运输途中丢失的比率。在这个 table 中,我们有四种产品,三个原产国,三个中转国(货物首先运往的地方,然后再传递给客户)和三个目的国。 table如下

 Status         Product    Count    Origin    Transit     Destination
 --------------------------------------------------------------------
 Delivered      Shoes      100      Germany   France        USA
 Delivered      Books      50       Germany   France        USA
 Delivered      Jackets    75       Germany   France        USA
 Delivered      DVDS       30       Germany   France        USA
 Not Delivered  Shoes      7        Germany   France        USA
 Not Delivered  Books      3        Germany   France        USA
 Not Delivered  Jackets    5        Germany   France        USA
 Not Delivered  DVDS       1        Germany   France        USA
 Delivered      Shoes      300      Poland    Netherlands   Canada
 Delivered      Books      80       Poland    Netherlands   Canada
 Delivered      Jackets    25       Poland    Netherlands   Canada
 Delivered      DVDS       90       Poland    Netherlands   Canada
 Not Delivered  Shoes      17       Poland    Netherlands   Canada
 Not Delivered  Books      13       Poland    Netherlands   Canada
 Not Delivered  Jackets    1        Poland    Netherlands   Canada
 Delivered      Shoes      250      Spain     Ireland       UK
 Delivered      Books      20       Spain     Ireland       UK
 Delivered      Jackets    150      Spain     Ireland       UK
 Delivered      DVDS       60       Spain     Ireland       UK
 Not Delivered  Shoes      19       Spain     Ireland       UK
 Not Delivered  Books      8        Spain     Ireland       UK
 Not Delivered  Jackets    8        Spain     Ireland       UK
 Not Delivered  DVDS       10       Spain     Ireland       UK

我想创建一个新的 table 来显示一行中已交付和未交付的货物数量,如下所示。

Product   Delivered   Not_Delivered   Origin    Transit      Destination
Shoes     100         7               Germany   France       USA
Books     50          3               Germany   France       USA
Jackets   75          5               Germany   France       USA
DVDS      30          1               Germany   France       USA
Shoes     300         17              Poland    Netherlands  Canada
Books     80          13              Poland    Netherlands  Canada
Jackets   25          1               Poland    Netherlands  Canada
DVDS      90          0               Poland    Netherlands  Canada
Shoes     250         19              Spain     Ireland      UK
Books     20          8               Spain     Ireland      UK
Jackets   150         8               Spain     Ireland      UK
DVDS      60          10              Spain     Ireland      UK

我已经查看了其他一些帖子,但到目前为止我还没有找到我正在寻找的内容。也许这里的问题是代码中会有多个 WHERE 语句,以确保我不会将所有鞋子分组在一起,或者所有国家组。

SQL可以吗?

是这样的吗?

select
product
,sum(case when status = 'Delivered' then count else 0 end) as delivered
,sum(case when status = 'Not Delivered' then count else 0 end) as not_delivered
,origin
,transit
,destination

from table

group by
product
,origin
,transit
,destination

这很容易;不是每个产品、原产地、运输、目的地和状态一行,您只需要每个产品、原产地、运输和目的地一个结果行。所以按这四列分组并有条件地聚合:

select 
  product, origin, transit, destination,
  sum(case when status = 'Delivered' then "count" else 0 end) as delivered,
  sum(case when status = 'Not Delivered' then "count" else 0 end) as not_delivered
from mytable
group by product, origin, transit, destination;

顺便说一句:为列名使用关键字不是一个好主意。我使用双引号来使用您的列 count,这是标准的 SQL,但我不知道它是否适用于 Google BigQuery。也许它必须是 "Count" 而不是 "count" 或完全不同的东西。)

SELECT 
  product, origin, transit, destination,
  SUM([count] * (status = 'Delivered')) AS delivered,
  SUM([count] * (status = 'Not Delivered')) AS not_delivered
FROM mytable
GROUP BY 1, 2, 3, 4