Mysql 自我加入让我望而却步
Mysql Self-join eludes me
我一直在这些论坛上徘徊,一直在寻找有关连接和 Sub_queries 的技巧,并储备了一些解决方案,但我一直 运行 做一些看似简单但让我望而却步的事情。
这几天搜索这个论坛还没有找到我的答案。
所以,这里是:
我有一个 table,它有一个键 ID,一个人的 姓名,以及一个名为 状态
我需要使用通常的别名将此 table 与其自身连接起来,并简单地显示行。
到目前为止,我可以获得 'Appointments' 上的正确计数或 'Fails' 上的正确计数,但我的 JOINS 无法将它们全部放在一起,因此它看起来很完整,如下图所示:
id |名称 |约会(来自状态值)|失败(来自状态值)
36 |布拉德·琼斯 | 78 | 37
45 |雪莉·阿特沃特 | 56 | 44
47 |杰克布里尔 | 33 | 60
53 |诺姆·约翰逊 | 17 | 26
我可以得到一列id,
其中一个名字,
一个来自 Status 值,即具有 'Appointment' AS # Appointments 的约会计数
或者我可以获得 Status 列行的计数,其中 Status LIKE 'No Interest'
但我无法获得 Join
我使用这样的查询和许多变体来从 4 列中获取 3 列,但是当我超越尝试加入时,我迷路了....所以在这里我备份并只显示一个可以使用的查询获取约会次数或通过更改状态值可以获得失败次数....
SELECT 培训师 ID、培训师姓名、COUNT(*) 次约会
从 trainer_appointments
GROUP BY 状态,trainerid
拥有状态 = 'Appointment'
按约会排序 DESC
在这个table中每个'name'都有一个钥匙ID号
所以 Brad Jones 的 id 永远是 36
我正在计算有多少行标有他的 ID 号满足状态值 'Appointment' 的条件,并且在单独的列中将状态值 'No Interest' 计数为 FAILS
而且我也尝试过 -- 状态像 'Appointment' 或
WHERE 状态 LIKE 'Appointment' 或
拥有状态 = 'Appointment'
当我进一步处理此查询并尝试在其自身的别名下加入此 table 以获得 FAILS COUNT WHERE "Status LIKE 'No Interest'" GROUP BY id 时,加入失败。
JOINS 因各种错误原因而失败,或者查询产生了错误的计数。
我已经尝试调整我在这个论坛上看到的许多其他联接来解决这个简单的问题,但即使查询在技术上确实执行了,我也无法获得正确的值。
如果你们中的一位专业人士能告诉我这是多么简单,我会很高兴!
我很冒险,我猜你不需要加入,你只需要对每个名字的几个不同状态进行计数。条件聚合就是你所需要的。
select name,
count(case when status = 'Appointment' then 1 end) appointments,
count(case when status = 'Fail' then 1 end) fails
from <yourtable>
group by name
只需修改 case 语句中的条件即可调整计算的值。
我一直在这些论坛上徘徊,一直在寻找有关连接和 Sub_queries 的技巧,并储备了一些解决方案,但我一直 运行 做一些看似简单但让我望而却步的事情。
这几天搜索这个论坛还没有找到我的答案。
所以,这里是:
我有一个 table,它有一个键 ID,一个人的 姓名,以及一个名为 状态
我需要使用通常的别名将此 table 与其自身连接起来,并简单地显示行。
到目前为止,我可以获得 'Appointments' 上的正确计数或 'Fails' 上的正确计数,但我的 JOINS 无法将它们全部放在一起,因此它看起来很完整,如下图所示:
id |名称 |约会(来自状态值)|失败(来自状态值)
36 |布拉德·琼斯 | 78 | 37
45 |雪莉·阿特沃特 | 56 | 44
47 |杰克布里尔 | 33 | 60
53 |诺姆·约翰逊 | 17 | 26
我可以得到一列id, 其中一个名字, 一个来自 Status 值,即具有 'Appointment' AS # Appointments 的约会计数 或者我可以获得 Status 列行的计数,其中 Status LIKE 'No Interest' 但我无法获得 Join
我使用这样的查询和许多变体来从 4 列中获取 3 列,但是当我超越尝试加入时,我迷路了....所以在这里我备份并只显示一个可以使用的查询获取约会次数或通过更改状态值可以获得失败次数....
SELECT 培训师 ID、培训师姓名、COUNT(*) 次约会
从 trainer_appointments
GROUP BY 状态,trainerid
拥有状态 = 'Appointment'
按约会排序 DESC
在这个table中每个'name'都有一个钥匙ID号 所以 Brad Jones 的 id 永远是 36
我正在计算有多少行标有他的 ID 号满足状态值 'Appointment' 的条件,并且在单独的列中将状态值 'No Interest' 计数为 FAILS
而且我也尝试过 -- 状态像 'Appointment' 或
WHERE 状态 LIKE 'Appointment' 或
拥有状态 = 'Appointment'
当我进一步处理此查询并尝试在其自身的别名下加入此 table 以获得 FAILS COUNT WHERE "Status LIKE 'No Interest'" GROUP BY id 时,加入失败。
JOINS 因各种错误原因而失败,或者查询产生了错误的计数。
我已经尝试调整我在这个论坛上看到的许多其他联接来解决这个简单的问题,但即使查询在技术上确实执行了,我也无法获得正确的值。
如果你们中的一位专业人士能告诉我这是多么简单,我会很高兴!
我很冒险,我猜你不需要加入,你只需要对每个名字的几个不同状态进行计数。条件聚合就是你所需要的。
select name,
count(case when status = 'Appointment' then 1 end) appointments,
count(case when status = 'Fail' then 1 end) fails
from <yourtable>
group by name
只需修改 case 语句中的条件即可调整计算的值。