MySQL-连接两个表,组和计数
我有两张桌子:MySQL-连接两个表,组和计数,mysql,sql,Mysql,Sql,我有两张桌子: reviewStatusPhases - id|name 及 reviewStatusPhases表中插入了记录(活动、非活动、暂停、终止…),并且userPhase为空 这些表格通过网络连接 userPhase.reviewStatusPhase_id = reviewStatusPhases.id 一对一 是否有可能在一个查询中我得到所有reviewStatusPhases,并告知每个阶段有多少用户?在这种情况下,我会得到如下结果: Active (0 Users) I
reviewStatusPhases - id|name
及
reviewStatusPhases表中插入了记录(活动、非活动、暂停、终止…),并且userPhase为空
这些表格通过网络连接
userPhase.reviewStatusPhase_id = reviewStatusPhases.id
一对一
是否有可能在一个查询中我得到所有reviewStatusPhases,并告知每个阶段有多少用户?在这种情况下,我会得到如下结果:
Active (0 Users)
Inactive (0 Users)
On Pause (0 Users)
Terminated (0 Users)
我在这里做了一些假设(例如,连接中的内部连接与左连接,以及计数中的不同),但听起来你只是想
SELECT reviewStatusPhases.name, COUNT(DISTINCT userPhase.user_id)
FROM userPhase INNER JOIN reviewStatusPhases
ON userPhase.reviewStatusPhase_id = reviewStatusPhases.id
GROUP BY reviewStatusPhases.name
我在这里做了一些假设(例如,连接中的内部连接与左连接,以及计数中的不同),但听起来你只是想
SELECT reviewStatusPhases.name, COUNT(DISTINCT userPhase.user_id)
FROM userPhase INNER JOIN reviewStatusPhases
ON userPhase.reviewStatusPhase_id = reviewStatusPhases.id
GROUP BY reviewStatusPhases.name
使用左连接,如下所示:
SELECT COUNT(m.UserId) FROM Table1 m
LEFT JOIN Table2 k ON k.StatusId = m.StatusId
WHERE k.Status = 'Inactive'
SELECT r.name as `name`, count(u.id) as `count` FROM reviewStatusPhases r LEFT OUTER JOIN userPhase u ON r.id = u.reviewStatusPhase_id GROUP BY r.name
您可以轻松地使用状态列跟踪用户及其活动。在您的情况下,ReviewStatus使用
左连接
,如下所示:
SELECT COUNT(m.UserId) FROM Table1 m
LEFT JOIN Table2 k ON k.StatusId = m.StatusId
WHERE k.Status = 'Inactive'
SELECT r.name as `name`, count(u.id) as `count` FROM reviewStatusPhases r LEFT OUTER JOIN userPhase u ON r.id = u.reviewStatusPhase_id GROUP BY r.name
您可以轻松地使用状态列跟踪用户及其活动。对于您的情况,ReviewStatus我希望以下内容将有所帮助
SELECT RPS.Name, COUNT(UP.user_id)
FROM reviewStatusPhases RPS
LEFT OUTER JOIN userphases UP ON RPS.id = UP.reviewStatusPhase_id
GROUP BY RPS.Name
ORDER BY RPS.Name
我希望以下内容会有所帮助
SELECT RPS.Name, COUNT(UP.user_id)
FROM reviewStatusPhases RPS
LEFT OUTER JOIN userphases UP ON RPS.id = UP.reviewStatusPhase_id
GROUP BY RPS.Name
ORDER BY RPS.Name
查询如下:
SELECT COUNT(m.UserId) FROM Table1 m
LEFT JOIN Table2 k ON k.StatusId = m.StatusId
WHERE k.Status = 'Inactive'
SELECT r.name as `name`, count(u.id) as `count` FROM reviewStatusPhases r LEFT OUTER JOIN userPhase u ON r.id = u.reviewStatusPhase_id GROUP BY r.name
查询如下:
SELECT COUNT(m.UserId) FROM Table1 m
LEFT JOIN Table2 k ON k.StatusId = m.StatusId
WHERE k.Status = 'Inactive'
SELECT r.name as `name`, count(u.id) as `count` FROM reviewStatusPhases r LEFT OUTER JOIN userPhase u ON r.id = u.reviewStatusPhase_id GROUP BY r.name
Sure-LEFT JOIN reviewStatusPhases with userPhase(这样您仍然可以获取尚未存在用户条目的那些阶段的记录),按阶段id分组,然后计数…Sure-LEFT JOIN reviewStatusPhases with userPhase(这样您仍然可以获取尚未存在用户条目的那些阶段的记录),按阶段id分组,和计数…对于一次多个状态,您可以使用
k.status IN('active','inactive')
。虽然第二个答案更适合使用GROUP BY
。对于一次多个状态,您可以使用k.status IN('active','inactive')
。尽管第二个答案更适合使用groupby
。