MySQL连接、选择、多个条件
我真的被这种多条件查询所困扰 有两组样本数据: 以下是我想要的: 我想知道《泰晤士报》提到的那些受尊敬的学生。。。他们在2012年每个价格、每个月、每个不同类型的奖励的平均收到金额是多少,如果在特定月份没有价值,则返回NULL 到目前为止我有MySQL连接、选择、多个条件,mysql,sql,join,Mysql,Sql,Join,我真的被这种多条件查询所困扰 有两组样本数据: 以下是我想要的: 我想知道《泰晤士报》提到的那些受尊敬的学生。。。他们在2012年每个价格、每个月、每个不同类型的奖励的平均收到金额是多少,如果在特定月份没有价值,则返回NULL 到目前为止我有 SELECT Type_Of_Reward, Honorable_Mention, MONTH(date) FROM Data_2 LEFT JOIN SELECT(Honorable_Mention, COUNT(*) FR
SELECT Type_Of_Reward, Honorable_Mention, MONTH(date)
FROM Data_2 LEFT JOIN
SELECT(Honorable_Mention, COUNT(*) FROM Data_2 GROUP BY Honorable_Mention ON Student_ID = Honorable_Mention)
WHERE YEAR(Data_1.date)=2012 AND...
如有任何意见/帮助,将不胜感激 您可以在所有月份都使用join和USE case来尝试此方法。如果您使用的是任何服务器端语言,请确保您为日期列设置了正确的数据类型。我建议您现在使用服务器端语言来进行此类型的数据表示。您可以尝试此方法
SELECT d.Type_Of_Reward, d2.Honorable_Mention,
(CASE WHEN d2.`Honorable_Mention` IS NOT NULL AND MONTH(d.`date`)=1 THEN d2.`Honorable_Mention` ELSE 0 END) AS jan,
. //for other months
.
.
.
(CASE WHEN d2.`Honorable_Mention_id` IS NOT NULL AND MONTH(d.`date`)=10 THEN d2.`Honorable_Mention` ELSE 0 END) AS `oct`
FROM
`data_1` d LEFT JOIN `data_2` d2 ON(d.`id`=d2 .`Honorable_Mention`)
数据库不能凭空生成数据。如果要表示“空”月份,则必须提供所需日期类型的列表,例如,包含所需年份/月份的临时表,以便加入。另外,将单个月份转换为这样的列需要pivot查询,mysql不支持这种查询。有一些变通方法,但它们使查询非常难看,并且很难维护。@MarcB使用DATEFORMAT和GROUP BY可以实现这一点。问题是,我们是在谈论仅为今年生成数据吗?所以这是一个“一次性运行并扔掉”的查询?@Marc B,谢谢你的输入。因为我是MySQL的新手,我知道在R/Pivot表中做这样的事情要容易得多。然而,我被要求在MySQL中完成这项工作(请仔细阅读。您需要了解这个概念,并在CASE语句中使用MONTH()函数,为每个month@AgRizzo谢谢,链接很有帮助!谢谢@dianuj你的结构真的很有帮助。我只是想知道如何把平均价格放在某个地方。
CASE WHEN
rocks!:)(即使有分组依据
和拥有
)