mysql根据条件计算成列

标签 mysql sql

我有一个 t_personne 表。 我为每个人编码了一个通用形式。 我还对每个项目的存在(proj_id)的“采访”表(t_entretien)进行编码。 对于项目来说,它可以有多个 Action 。 项目操作“RAE”编码为:2-01.01、2-02.01、2-02.02……2-03.01、2-03.02等。

我有一个计算规则:一个单元等于来自两个不同类别的2个 Action 编码为 Action 。 例如,一个人执行了一项操作 2-02.01,而 2-03.01 执行了 2-03.04 操作,则仅算作一个单位。 一个人拥有4股2-03类型的不算。 我必须计算单位总数。

我开始思考:

SELECT COUNT(*) AS Expr1
FROM (SELECT t_entretien.id
      FROM t_entretien 
      INNER JOIN
      t_action on t_action.cact_caction = t_entretien.ent_id
      GROUP BY t_entretien.id
      HAVING(COUNT(DISTINCT t_action.cact_caction) > 1)) AS derivedtbl_1

这里有一个小 FIDDLE http://sqlfiddle.com/#!2/6c831/1

谢谢大家!

版本

上下文如下。

我找到一个人(t_personne)并使用表格介绍一般数据。

这个人,我在面试(t_entretien)时加入了一个项目(t_projet)。 在采访中,我意识到了行动。 每个 Action 都是具体的项目(t_action)。 对于该项目,其中“cact_code”为2,我选择了不同的 Action 编码(参见表t_codeaction)。

我的问题如下。我必须根据强加给我的公式计算 Action 数量:1 个单位 = 2 个属于不同类别的 Action 。类别标识如下(t_codeaction):2-01该类别只有1个 Action (2-01.01),后面的类别包括4个 Action 2-02和2-03在第三个类别中包括12个 Action 等。 想象一下,“ent_id” = 8105 的人收到了 4 个操作,其中一个属于 2-01.01 类别,另外 3 个属于 2-03。它是该规则下唯一的一个单位,因为它已收到至少两个不同类别的操作。 2-03 类别中的 3 个操作占一个操作。因此,“ent_id” = 8114 的人仅收到 3 个同类别 2-03 的操作,此单位为 0。

最佳答案

我可能在胡乱猜测,因为这个问题描述得不好,但无论如何,是这样的?

SELECT id as entretiedId, count(*)/2 as units from
 (SELECT t_entretien.id, SUBSTRING(t_action.cact_caction,1,4) as CATEGORY, COUNT(*) 
  FROM t_entretien 
  INNER JOIN
  t_action on t_action.ent_id = t_entretien.ent_id
  GROUP BY t_entretien.id, CATEGORY) as t_derived
GROUP BY id having count(distinct category) > 1

派生表对操作进行计数,但每个类别每个条目一行。然后外部的group by计算每个类别的子操作,并除以二来计算单位。

fiddle :http://sqlfiddle.com/#!2/6c831/22/0

关于mysql根据条件计算成列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976160/

相关文章:

sql - 类似于 MySQL FIELD() 函数的 MS SQL Server 功能是什么?

sql - 添加非聚集索引会锁定我的表吗?

php - 获取更新后的值与原始记录之间的差异

mysql - 每天返回过去 30 天内的活跃用户

php - 问题foreach()提供了无效的参数

sql - 普通表表达式,遍历图时如何避免无限递归?

SQL如何将行映射到列?

mysql - 返回左表中的所有产品以及评级表中的结果,无论给定用户是否对它们进行评级

mysql - 连接来自同一张表的结果

mysql - 需要按照 "in"函数中输入的顺序进行 sql 查询的结果集,无需任何创建和插入