【问题标题】:Creating concatenated results tables创建串联结果表
【发布时间】:2021-10-01 00:53:33
【问题描述】:

我有类似的表 A:

我有像 B 这样的表:

我想要一个在必要时连接列并合并行的结果表,例如:

我尝试使用 Union,但它并没有完全满足我的需求。有没有其他有效的方法来达到这个结果。

【问题讨论】:

  • 请编辑您的问题并以文本形式发布表格。请发布您尝试过的查询。
  • 共享创建表和插入数据的脚本。图像不起作用。
  • Sqlite 和 mysql 是两个不同的产品。删除了冲突的产品标签。请添加您实际使用的那个。

标签: sqlite group-by sum union


【解决方案1】:

如果 SQLite 支持 FULL 连接,这将很容易解决,但它不支持。

首先使用 UNION ALL 创建一个结果集,其中包含 2 个表的所有行以及额外的列以涵盖水果和蔬菜,然后聚合,这样在 'tomato' 这样的情况下,您将只有 1 行:

SELECT Fruit_Veggie, 
       SUM(Count_Fruit) Count_Fruit,
       SUM(percent_fruit) percent_fruit,
       SUM(Count_Veggie) Count_Veggie,
       SUM(percent_Veggie ) percent_Veggie 
FROM (
  SELECT Fruit Fruit_Veggie, count Count_Fruit, percent percent_fruit, 0 Count_Veggie, 0 percent_Veggie 
  FROM TableA
  UNION ALL
  SELECT Veggies, 0, 0, count, percent
  FROM TableB
)
GROUP BY Fruit_Veggie

【讨论】:

    【解决方案2】:

    您需要进行完全联接或不同的联合。您知道这一点是因为您有一个番茄行,其中包含两个表中的值。这将为您提供空值,您将使用合并将其变为 0(零)。这是作业吗?

    【讨论】:

    • 感谢您的评论,但我也了解一些聪明人已从问题中删除了 sqlite 标签。包含两个标签是有原因的。
    【解决方案3】:

    您已粘贴图像。因此,我们很难复制文本和创建脚本。您应该在提问时分享脚本。

    UNION 有什么问题,请分享。我认为下面的查询应该有效。但也请与工会分享您的问题。

    SELECT Fruit Fruit_Veggie, Count count_Fruit, percent percent_Fruit, 0 Count_Veggie, 0 pecent_Veggie FROM A
    UNION
    SELECT veggie, 0, 0, count, percent from B
    

    【讨论】:

    • 因为tomato。他希望fruitveggie 表中的行并排显示,而union 将显示两行tomato。可能union 成为子查询然后group by
    • 同意。为了尝试,我需要数据脚本,我不会自己为这个问题创建脚本。
    猜你喜欢
    • 1970-01-01
    • 2019-02-13
    • 2015-04-03
    • 1970-01-01
    • 2011-04-21
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多