【问题标题】:Flag Records Sharing fieldA value where FieldB value null for all标记记录共享字段值,其中所有字段值为空
【发布时间】:2016-04-23 14:59:30
【问题描述】:

我有一个表,其中有一个字段A,多个记录可以共享。

我还有另一个字段,Value。

我有第三个字段,GroupLeaderFlag,该标志基于一些先前的关系,共享字段 A 的记录是该组中的核心记录,因此我可以进一步比较它们之间的值和其他字段。

在某些情况下,我无法根据先前的关系为给定组标记 GroupLeaderFlag。

所以我想做一个辅助过程来标记 GroupLeaderFlag 具有以下规则:

  • 记录共享字段A ID
  • 具有该 fieldA ID 的记录都没有 GroupLeaderFlag,即所有共享 fieldA 的记录都是 NULL
  • 符合该标准且具有最低值的组中的记录(在某些情况下,两个或更多可以共享最低值,但这种情况很少见)

更新: 我意识到我有另一个字段 GroupLeaderName,对于每个 fieldA 组,我将我为该组确定/标记为 GroupLeaderFlag 的记录的名称/ID 存储,以便我在组中的每条记录上都方便地使用该名称/ID。

因此,这将成为另一个分组依据的字段,以获取未以 GroupLeader 结尾的 fieldA 组。

我成功运行了 Select,但无法将其转换为 Update:

Select fieldA,Name,Min(Value),'X' 
as GroupLeaderFlag from TableA 
where GroupLeaderName is NULL  
group by fieldA

所以基本上我需要把它变成一个更新,这样我从选择中得到的输出是 fieldA 组中记录的名称,它没有 GroupLeaderFlag 和该组中的最小值以及一个临时字段值 'X' 进行更新。

更新:我发现每个 fieldA 组自然地按值 asc 排序,从而使我无需提取每个 groupin 的最低值。所以我这样做了:

Update TableA as T1
Inner Join
(Select ID,GroupLeaderFlag from TableA 
group by fieldA having Count(GroupLeaderFlag )=0) as T2
On T1.ID=T2.ID set T1.GroupLeaderFlag ='X'

【问题讨论】:

  • 请编辑您的问题并提供示例数据和所需结果。

标签: mysql group-by


【解决方案1】:

假设

  1. Name 列是唯一的(或至少在同一个 fieldA 内)
  2. 标志列是'X'(查看您的示例)或''(空字符串)——尽管我更喜欢01

此查询将返回新组长的姓名:

SELECT 
    fieldA,
    (SELECT Name FROM MyTable s 
     WHERE s.fieldA = n.fieldA 
     ORDER BY `Value` LIMIT 1) AS `Name`
FROM MyTable n 
GROUP BY fieldA 
HAVING MAX(GroupLeaderFlag) = ''

UPDATE 中组合将导致

UPDATE MyTable u
JOIN (
  SELECT 
      fieldA,
      (SELECT Name FROM MyTable s 
       WHERE s.fieldA = n.fieldA 
       ORDER BY `Value` LIMIT 1) AS `Name`
  FROM MyTable n 
  GROUP BY fieldA 
  HAVING MAX(GroupLeaderFlag) = ''
) AS f USING (fieldA)
SET GroupLeaderFlag = IF(u.`Name` = f.`Name`, 'X', ''),
GroupLeaderName = f.`Name`;

概念证明:http://sqlfiddle.com/#!9/a9be4b/1

【讨论】:

  • 哇。一个问题是没有名称不是唯一的,但我会以此为基础。实际上,名称选择并不那么重要,只是 a) fieldA 分组和 b) 最小值。
猜你喜欢
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2013-08-26
  • 2017-03-06
相关资源
最近更新 更多