我是一家小公司的非IT人员(10个人)。我的工作之一就是收集数据并向我们的团队报告。尽管如此,我还是使用MySQL。多年来,我构建了各种查询来提取数据。我最近将我们的服务器升级到了版本8,在第8版中,“组按”规则得到了更严格的执行。我正在尽我最大的努力重写一些违反规则的查询。然而,我正在挣扎,需要帮助理解我应该如何重写我的查询。
下面是一个示例:
SELECT
Manager,
calldate_final as 'Call Date',
putdate_final as 'Put Date',
concat('<a target="_blank" href="fi_details_by_security.php?manager=',frm.fi_details.manager,'&date=',frm.fi_details.MaturityDate_Final,'">',
frm.fi_details.MaturityDate_Final,'<a/>') AS 'Maturity Date',
PortfolioCode as 'Portfolio',
concat('$',format(sum(parvalue),0)) as 'Total Par Value',
count(parvalue) as 'Number of Maturities'
FROM frm.fi_details
WHERE Manager = WhereManager AND YEAR(MaturityDate_Final) = year(now())
GROUP BY portfoliocode, MaturityDate_Final
ORDER BY maturitydate_final, portfoliocode;最终的结果是按日期计算不同持有量的票面价值之和。
谢谢你的帮助。我已经找过这个话题了,坦白地说,我现在更迷茫了。任何帮助和未来的指导都将受到极大的感谢。

发布于 2020-12-17 15:10:23
当您混合普通列(如“Manager”或“concat”(<一个目标.)时对于聚合函数(如查询中的sum()和count() ),您需要使用GROUP BY。早期的MySQL版本允许非常自由地(坦率地说是错误的)使用GROUP BY。
确定将什么放入GROUP BY是非常简单的。只需列出SELECT中的所有普通列,并省略聚合函数中的列。
因此,您的查询将变成:
SELECT
Manager,
calldate_final as 'Call Date',
putdate_final as 'Put Date',
concat('<a target="_blank" href="fi_details_by_security.php?manager=',frm.fi_details.manager,'&date=',frm.fi_details.MaturityDate_Final,'">',
frm.fi_details.MaturityDate_Final,'<a/>') AS 'Maturity Date',
PortfolioCode as 'Portfolio',
concat('$',format(sum(parvalue),0)) as 'Total Par Value',
count(parvalue) as 'Number of Maturities'
FROM frm.fi_details
WHERE Manager = WhereManager AND YEAR(MaturityDate_Final) = year(now())
GROUP BY Manager, calldate_final, `Maturity Date`, PortfolioCode
ORDER BY maturitydate_final, portfoliocode;https://stackoverflow.com/questions/65343016
复制相似问题