我有一个 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
计算每个类别的子操作,并除以二来计算单位。
关于mysql根据条件计算成列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976160/