【发布时间】:2016-06-13 02:47:36
【问题描述】:
我需要根据 2 个字段来计算行数以进行分组。
动物(一)
id group_id strain_id death_date death_cause status
-----------------------------------------------------------------------
1 512 164 2015-12-01 Culled P
2 512 164 2015-12-02 Culled A
3 512 164 2015-12-02 Surplus B
4 512 230 2015-12-06 Culled A
5 512 164 2015-12-28 Culled A
6 512 230 2016-01-20 Culled B
7 512 230 2016-01-20 Surplus P
8 512 164 NULL NULL P
9 512 230 NULL NULL B
10 512 230 NULL NULL A
11 512 164 2016-01-25 Culled B
12 512 164 2016-02-29 Culled A
13 512 230 2016-02-03 Surplus P
14 512 230 2016-02-03 Culled A
组 (g)
id group_name
--------------
512 Mice
应变
id strain_name
----------------
164 Strain 1
230 Strain 2
群体动物数量 (gac)
id total_animals alive_count dead_count
----------------------------------------------------------------------
512 14 3 11
交配历史 (mh)
id animal_id history_type history_date
--------------------------------------------------------
1001 2 MA 2015-11-20
1002 2 MR 2015-12-01
1003 3 MA 2015-12-01
1004 6 FA 2015-12-21
1005 9 FA 2016-02-07
1006 10 MA 2016-01-27
1007 11 FA 2015-12-12
因此,当我将它们按 strain_id 和 death_cause 分组时,它们在视觉上应该是这样的:
菌株 1 ---- 剔除
1 512 164 2015-12-01 Culled P
2 512 164 2015-12-02 Culled A
5 512 164 2015-12-28 Culled A
11 512 164 2016-01-25 Culled B
12 512 164 2016-02-29 Culled A
应变 1 ---- 剩余
3 512 164 2015-12-02 Surplus B
菌株 2 ---- 剔除
4 512 230 2015-12-06 Culled A
6 512 230 2016-01-20 Culled B
14 512 230 2016-02-03 Culled A
应变 2 ---- 剩余
7 512 230 2016-01-20 Surplus P
13 512 230 2016-02-03 Surplus P
我想从 SQL 查询中得到以下结果:
g_name s_name d_cause a_total c_alive c_dead c_pup c_breeder c_total
------------------------------------------------------------------------------
Mice Strain 1 Culled 12 3 9 1 2 5
Mice Strain 1 Surplus 12 3 9 0 1 1
Mice Strain 2 Culled 12 3 9 0 1 3
Mice Strain 2 Surplus 12 3 9 2 0 2
基本上我想使用 2 个类别来计算动物的数量,在这种情况下是 strain_name 和 death_cause
请注意,对于要算作饲养员 (c_breeder) 的动物,我必须查看交配历史表并检查 animal_id 是否曾有任何这些代码 MA 或 FA .
我在groups、group_animal_count 和strains 上使用INNER JOIN。我将LEFT JOIN 用于mating_history,因为状态为P 的动物在该表中不会有记录,因为它们只是幼崽,不会参与交配。
【问题讨论】:
-
这是您使用的 exact 查询,还是涉及到一些
LEFT JOIN? -
@GiorgosBetsos 有 3 个
INNER JOINs 和 1 个LEFT JOIN。 -
你必须给我们一些额外的信息。您面临的问题无法通过提供的表结构、示例数据和查询重现。
-
好的,给我几分钟,我会尝试重做这个问题。
-
你不能只按 group_name、strain_name、death_cause 分组(使用内部连接来连接表)然后计算 death_dates 吗?