Mysql 使用GROUPBY时的用例
背景:我试图显示一个标题为:id、全名、职位7、职位8、职位9……的表格。如果一个人在7月和8月是在职员工,那么2012年7月和2012年8月将在一行的职位7和8上显示。如果我不使用GROUPBY,我会得到输出,但有两行。之所以会出现这种情况,是因为在BLMths表中,一个人由于受雇超过1个月,将有多个条目 如果我不使用GROUP BY,下面的查询将成功获取每个人的id、全名和月份。但问题是,如果我忽略使用GROUPBY,我的表中每个人将有4行(或更多)。当我使用GROUPBY时,每个人都有一行的期望输出,但表中所需的数据并不全在那里 有人知道我做错了什么吗?或者有人知道为什么当我使用GROUP BY时,我的一些案例陈述中的数据似乎丢失了吗 我知道答案必须很简单,但我似乎无法解决它。感谢您的帮助。非常感谢Mysql 使用GROUPBY时的用例,mysql,sql,group-by,case,Mysql,Sql,Group By,Case,背景:我试图显示一个标题为:id、全名、职位7、职位8、职位9……的表格。如果一个人在7月和8月是在职员工,那么2012年7月和2012年8月将在一行的职位7和8上显示。如果我不使用GROUPBY,我会得到输出,但有两行。之所以会出现这种情况,是因为在BLMths表中,一个人由于受雇超过1个月,将有多个条目 如果我不使用GROUP BY,下面的查询将成功获取每个人的id、全名和月份。但问题是,如果我忽略使用GROUPBY,我的表中每个人将有4行(或更多)。当我使用GROUPBY时,每个人都有一行
SELECT Blm.Ags, Blmths.Id, Ie.Full_Name, Blmths.Month,
CASE month
WHEN "2012-07-01" THEN 1
ELSE NULL
END AS Position_7,
CASE month
WHEN "2012-08-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_8,
CASE Blmths.Month
WHEN "2012-09-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_9,
CASE month
WHEN "2012-10-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_10,
CASE Blmths.Month
WHEN "2012-11-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_11,
CASE Blmths.Month
WHEN "2012-12-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_12,
CASE month
WHEN '2013-01-01' THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_1,
CASE month
WHEN "2013-02-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_2,
CASE month
WHEN "2012-03-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_3,
CASE Blmths.Month
WHEN "2013-04-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_4,
CASE Blmths.Month
WHEN "2013-05-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_5,
CASE Blmths.Month
WHEN "2013-06-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_6
FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie,
Bogus_Leadership_Members AS Blm
WHERE Blmths.Id = Blm.Id
AND Ie.Ags = Blm.Ags
AND Ie.Centre_Id = '666'
GROUP BY Blm.Ags
你需要更具体一些。这是针对什么数据库的?它以什么方式不起作用?是否发生了错误或未返回所需的结果?“我需要的数据不全在表中”是什么意思 如果每人有多个记录,会发生什么情况?您希望如何聚合数据 我猜你可能想要这样的东西(简称): 这给出了该人每月的记录
我看不到您正在查找的数据示例-您可以重新发布吗?我正在尝试显示一个如下表:@KahlilN:请不要将这些信息放入注释中,而是编辑您的问题。请回顾现有的答案,并给出反馈,如果它们有效,或者有什么问题。@PeterLang-谢谢你的建议。我已经编辑了问题并删除了评论。我正在使用MYSQL,下面的查询出现了一些错误。我开始得到错误“字段列表中的未知列”,当我得到“组语句中的未知列GRPBYCOL”时。除此之外,上面的查询正是我想要做的,它工作得非常完美!非常感谢:)
SELECT max(Blmths.Id), Ie.Full_Name, Blmths.Month,Blm.Ags FROM
(SELECT Blm.Ags,Blmths.Id, Ie.Full_Name, Blmths.Month
CASE month
WHEN "2012-07-01" THEN 1
ELSE NULL
END AS Position_7,
CASE month
WHEN "2012-08-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_8,
CASE Blmths.Month
WHEN "2012-09-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_9,
CASE month
WHEN "2012-10-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_10,
CASE Blmths.Month
WHEN "2012-11-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_11,
CASE Blmths.Month
WHEN "2012-12-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_12,
CASE month
WHEN '2013-01-01' THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_1,
CASE month
WHEN "2013-02-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_2,
CASE month
WHEN "2012-03-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_3,
CASE Blmths.Month
WHEN "2013-04-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_4,
CASE Blmths.Month
WHEN "2013-05-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_5,
CASE Blmths.Month
WHEN "2013-06-01" THEN Date_Format(Blmths.Month, '%Y_%b')
ELSE NULL
END AS Position_6
FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie,
Bogus_Leadership_Members AS Blm
WHERE Blmths.Id = Blm.Id
AND Ie.Ags = Blm.Ags
AND Ie.Centre_Id = '666') AS GRPBYCOL
GROUP BY Ie.Full_Name, Blmths.Month,Blm.Ags,GRPBYCOL
SELECT Blm.Ags, Blmths.Id, Ie.Full_Name,
SUM(CASE Blmths.month
WHEN "2012-07-01" THEN 1
ELSE NULL
END) AS Position_7
FROM Bogus_Leadership_Months AS Blmths, Injection_Employees AS Ie,
Bogus_Leadership_Members AS Blm
WHERE Blmths.Id = Blm.Id
AND Ie.Ags = Blm.Ags
AND Ie.Centre_Id = '666'
GROUP BY Blm.Ags, Blmths.Id, Ie.Full_Name