【问题标题】:grouping selections on multiple possible values in sqlite在 sqlite 中对多个可能值进行分组选择
【发布时间】:2021-03-04 21:00:41
【问题描述】:

我有一个 sqlite3 数据库,其中一个表包含有关运行测试的信息,例如:
表A
名称状态时间


测试通过 33
testb 失败 22
测试失败 41
testc 通过了 18
测试通过 27

某些测试会不时重命名,例如 testa 到 testa1,可能后来 testa1 到 testa2。所以我的桌子最终可能看起来像:
表A
名称状态时间


测试通过 33
testb 失败 22
testa1 失败 41
testc 通过了 18
测试通过 27
testa2 失败 45

我可以在单独的表格中跟踪更改,例如:

表 B
别名


testa testa1
testa testa2

虽然我不确定第二个条目是“testa testa2”还是“testa1 testa2”,但其中一个是否会比另一个更好(理想情况下,任何一个都可以)。我希望能够以某种方式对它们进行分组,所以我的查询会结合别名,所以我的结果看起来像:

testa、testa1、testa2:2 通过 2 失败
testb:0 次通过,1 次失败
testc: 1 通过 0 失败

所以我需要在查询中执行两个步骤,一个是对 testa、testa1 和 testa2 进行分组,并将该组的结果与(未重命名)测试的结果相加。我可以通过以下方式完成分组(只要我没有两个以上的别名):

select a.name, a.alias as name1, (select b.alias from B b where a.name = b.name and b.alias != a.alias limit 1) as name2 from B a group by a .name;

其中 B 是别名表,但我不知道如何将其与其他表结合起来:
select name, alias from A left join B on job_table.name = B.name where name not in (select alias from B) group by name, alias;

但这给了我成对的别名(testa testa1 在一行,testa testa2 在下一行)并且不能帮助我对这些总数求和。

【问题讨论】:

  • 表 B 中的name 是否始终是原始名称?

标签: sqlite


【解决方案1】:

加入表格并使用条件聚合:

SELECT COALESCE(b.name, a.name) || COALESCE(',' || GROUP_CONCAT(DISTINCT b.alias), '') test,
       SUM(a.status = 'passed') passed,
       SUM(a.status = 'failed') failed
FROM tableA a LEFT JOIN tableB b
ON b.alias = a.name
GROUP BY COALESCE(b.name, a.name)

请参阅demo
结果:

test passed failed
testa,testa1,testa2 2 2
testb 0 1
testc 1 0

【讨论】:

  • 由于某种原因这对我不起作用。可能是因为我只能访问 sqlite 3.14.1,但我将所有代码粘贴到我的 shell 中并最终得到:sqlite> SELECT COALESCE(b.name, a.name) || COALESCE(',' || GROUP_CONCAT(b.alias), '') 测试,...> SUM(a.status = 'passed') 通过,...> SUM(a.status = 'failed') 失败...> FROM tableA a LEFT JOIN tableB b ...> ON b.alias = a.name ...> GROUP BY COALESCE(b.name, a.name); testa 4 0 testa1 0 2 testa2 0 2 testb 0 2 testc 2 0
  • 对不起,上面的格式有问题,但是你得到了“testa,testa1,testa2 2 2”,我在一行得到了“testa 4 0”,然后是“testa1 0 2”,然后是“testa2 0 2” "
  • @Tim 我的答案中的代码在 3.14.1 版本中运行良好。如果您得到您在评论中发布的结果,那么您的数据不是您在问题中发布的内容。在此处创建一个小提琴:dbfiddle.uk/?rdbms=sqlite_3.27 使用您的实际数据,以便我进行测试。
  • 抱歉,它正在工作。我猜当我将它粘贴到我的 unix 窗口时,有些东西出了问题。
猜你喜欢
  • 2015-04-10
  • 2013-07-30
  • 2010-10-26
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
相关资源
最近更新 更多