sql-如何比较表和计数出现次数

jtoj6r0c  于 2021-07-26  发布在  Java
关注(0)|答案(4)|浏览(258)

我需要在sql中使用大查询比较两个表,表(a)和表(b)。
表a是不同销售商出售的所有水果的完整清单。三家供应商都有三种类型。
表b是按供应商列出的销售清单,以及他们每天销售的水果

(Table A)             (Table B) 
    ID | Fruit     ID |  Item  | Sold | Date
    ---+--------  ----+--------+------+-------        
    1  | Apple     1  | Apple  |  1   |  M
    1  | Orange    1  | Apple  |  1   |  T
    1  | Banana    2  | Orange |  1   |  M
    2  | Apple     2  | Banana |  1   |  W
    2  | Orange    2  | Orange |  1   |  F
    2  | Banana    3  | Banana |  1   |  S
    3  | Apple
    3  | Orange
    3  | Banana

我要做的是连接这些表,创建表c,在表c中我希望它显示所有的供应商和可用的水果,以及每种类型的总销量。我还想包括任何空值以及0。
棘手的部分是表b中的item列是一个串联字段,因此我无法立即从a where fruit=item from b进行连接,因此我假设它必须是两个子查询,并导致创建表c。

(Table C)

    ID | Fruit  | Sold
    ---+--------+-------
    1  | Apple  | 2
    1  | Orange | 0 
    1  | Banana | 0 
    2  | Apple  | 0 
    2  | Orange | 2 
    2  | Banana | 1 
    3  | Apple  | 0 
    3  | Orange | 0 
    3  | Banana | 1

不确定这是否是我如何连接表的问题,但我只是无法得到结果。不过,我绝对会把这归咎于我的新手级sql技能——所以感谢您对如何解决这个问题的任何指导。

neskvpey

neskvpey1#

如果你有sql,你会做一个内部连接。

SELECT A.ID, A.Fruit, B.Sold 
FROM A
INNER JOIN B ON A.ID = B.ID
3zwjbxry

3zwjbxry2#

你可以用 left join 具有聚合功能 sum 如下所示
这是演示。

select
  a.id,
  a.fruit,
  coalesce(sum(sold), 0) as sold
from tableA a
left join tableB b
on a.id = b.id
and a.fruit = b.item
group by
  a.id,
  a.fruit

输出:

| id  | fruit  | sold |
| --- | ------ | ---- |
| 1   | Apple  | 2    |
| 1   | Banana | 0    |
| 1   | Orange | 0    |
| 2   | Apple  | 0    |
| 2   | Banana | 1    |
| 2   | Orange | 2    |
| 3   | Apple  | 0    |
| 3   | Banana | 1    |
| 3   | Orange | 0    |
cbwuti44

cbwuti443#

下面是bigquery标准sql


# standardSQL

SELECT ID, Fruit, IFNULL(Sold, 0) AS Sold
FROM `project.dataset.tableA`
LEFT JOIN (
  SELECT ID, Item AS Fruit, SUM(Sold) AS Sold 
  FROM `project.dataset.tableB`
  GROUP BY ID, Item  
) 
USING(ID, Fruit)
50few1ms

50few1ms4#

您可以按如下方式使用sql查询:

SELECT 
     Ta.id
    ,Ta.Fruit
    ,isnull(Tb.Sold,0)Sold 
FROM TableA Ta
    Left join(
        SELECT  
        id ,
        item
        ,sum(Sold)Sold 
        FROM TableB
        GROUP BY id 
        ,item 
    )Tb ON Ta.id=tb.id AND Ta.Fruit=Tb.Item

相关问题