【问题标题】:fill groups with values based on group values (update with group bys) - SQL - postgre使用基于组值的值填充组(使用 group by 更新)-SQL-postgre
【发布时间】:2017-01-31 05:56:54
【问题描述】:

我有这样的情况,我产生了一些输出,并且基于归属的分组,它得到和索引(对于组来说很常见)。然后我继续生产并插入一些属于同一组的新值。我想为这些新记录分配该组已有的相同“标记”。我想单独使用SQL。 如下图所示,这些组是由一个元组(大陆、区域、州)组成的,实际上我是根据它进行分组的。 (表名:'geo')

我怎样才能把 5 号放在曼彻斯特旁边,6 号放在里昂旁边?

【问题讨论】:

  • 您目前如何处理插入记录的情况,该记录是给定大陆、地区、州、城市组合的第一个记录?在这种情况下,group 的值是如何确定的?
  • 你有效地提出了一个好观点。由于批次很小,我使用了基于 python 的解决方案(程序化)。但是这张桌子会变得很大。我也愿意完全重写所有组索引,只要它们是唯一的数字组

标签: mysql postgresql group-by


【解决方案1】:

如果您可以先插入数据,然后运行第二个查询来更新空白组号,那么有一个选项:

UPDATE yourTable t1
SET group = t2.group
FROM
(
    SELECT continent, zone, state
           MAX(group) AS group
    FROM yourTable
    GROUP BY continent, zone, state
) t2
WHERE t1.continent = t2.continent AND
      t1.zone      = t2.zone      AND
      t1.state     = t2.state

FROM 子句中的内部查询查找每个大陆、地区、州组合的最大 group 值。每个group 组合应该只有两种类型的值,即数字和/或NULLNULL 值表示该记录是新插入的,但它会被 MAX 函数忽略。

【讨论】:

  • 谢谢伙计。是的,我可以先插入数据,因为这正是我的程序的内置方式
  • @Asher11 重新加载页面。我认为您只需要按大陆、地区和州进行分组。
猜你喜欢
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多