- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 MySQL 服务器版本 5.7.27 的新 VPS 服务器。在这个新的 VPS 中,我上传了一个数据库和一些代码,这些代码是我从以前的服务器上获得的,该服务器具有较旧的 MySQL 服务器版本。
MySQL 服务器版本 5.7.27 默认启用 only_full_group_by。当在新的 VPS 服务器中出现问题时,我试图运行一个包含 GROUP BY 语句的查询,该语句曾经在我的旧服务器中工作,但现在在新服务器中我收到以下消息。
1055:SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列“ihrwpmmy_loyal.i.id”,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
我知道有删除/禁用 only_full_group_by 的选项,但我想正确地做事并更正我的查询。
我一直在阅读并且了解到将 i.id 添加到 GROUP BY 语句将再次显示表中的值,但我真的不想 GROUP BY i.id 相反,我只想 GROUP BY i.loadNumber 但我被迫 GROUP BY i.id 以消除错误。我真的也需要 GROUP BY i.loadNumber 因为我不想在表格上显示重复的负载号。
SELECT i.id AS ivoiceIDAOC,
i.debtorId,
i.loadNumber,
i.amountUsd,
i.sentDate,
i.commissionStatus,
i.paidDate,
i.status,
cp.amountUsd AS amountUsdCarriersPayments,
i.amountUsd - SUM(cp.amountUsd) AS companyProfitUsd,
ROUND((i.amountUsd - SUM(cp.amountUsd)) * 0.10, 2) AS salesRepProfitUsd,
ROUND(((i.amountUsd - SUM(cp.amountUsd)) * 0.10) * 0.50, 2) AS advanceOnCommissionUsd,
l.id,
l.clientName,
l.repID
FROM invoice i
LEFT OUTER JOIN leads l ON i.debtorId = l.id
INNER JOIN carriersPayments cp ON cp.loadNumber LIKE CONCAT('', i.loadNumber, '%')
WHERE True
".$filter_AOC_date."
".$filter_AOC_salesRep."
AND i.commissionStatus IS NULL
GROUP BY
i.id,
i.loadNumber,
cp.amountUsd
ORDER BY i.id desc";
表格是这样的。
Load #|Customer Name| Paid Date |Revenue| Cost |Co Profit|SR Profit | AOC |
------+-------------+-----------+-------+------+--------------------+------+
1570 | Customer 1 | 2019-09-19| $100 | $50 | $50 | $5 | $2.5 |
1565 | Customer 2 | 2019-09-17| $102 | $50 | $52 | $5.2 | $2.6 |
1565 | Customer 2 | 2019-09-16| $104 | $50 | $54 | $5.4 | $2.7 |
1566 | Customer 3 | 2019-09-13| $106 | $50 | $56 | $5.6 | $2.8 |
如您在示例表中所见,如果我被迫将 i.id 添加到我的 GROUP BY 语句中,我将获得两次加载编号 1565。
我只想看到不同的负载数。
Load #|Customer Name| Paid Date |Revenue| Cost |Co Profit|SR Profit | AOC |
------+-------------+-----------+-------+------+--------------------+------+
1570 | Customer 1 | 2019-09-19| $100 | $50 | $50 | $5 | $2.5 |
1565 | Customer 2 | 2019-09-17| $206 | $100 | $106 | $10.6 | $5.3 |
1566 | Customer 3 | 2019-09-13| $106 | $50 | $56 | $5.6 | $2.8 |
最佳答案
你在select select some column not involbed in aggreagation function and not mentioned in group by this is not allowed by default for the most recent version of mysql
此外,您还在选择和聚合函数中使用了同一列,这很奇怪,您不能同时使用其中一个,似乎没有意义
根据您的代码,您可以使用适当的子查询重构您的查询
select loadNumber, SUM(amountUsd) sum_usd, SUM(amountCad) sum_cad
from carriersPayments
group by loadNumber
例子:
"SELECT i.id AS ivoiceIDAOC,
i.debtorId,
i.loadNumber,
i.amountUsd,
i.amountCad,
i.sentDate,
i.commissionStatus,
i.paidDate,
i.status,
cp.amountUsd AS amountUsdCarriersPayments,
cp.amountCad AS amountCadCarriersPayments,
i.amountUsd - sum_usd AS companyProfitUsd,
i.amountCad - sum_cad AS companyProfitCad,
ROUND((i.amountUsd - sum_usd) * 0.10, 2) AS salesRepProfitUsd,
ROUND((i.amountCad - sum_cad) * 0.10, 2) AS salesRepProfitCad,
ROUND(((i.amountUsd - sum_usd) * 0.10) * 0.50, 2) AS advanceOnCommissionUsd,
ROUND(((i.amountCad - sum_cad) * 0.10) * 0.50, 2) AS advanceOnCommissionCad,
l.id,
l.clientName,
l.repID
FROM invoice i
INNER JOIN carriersPayments cp ON cp.loadNumber LIKE CONCAT('', i.loadNumber, '%')
INNER JOIN (
select loadNumber, SUM(amountUsd) sum_usd, SUM(amountCad) sum_cad
from carriersPayments
group by loadNumber
) t ON t.loadNumber LIKE CONCAT('', i.loadNumber, '%')
LEFT OUTER JOIN leads l ON i.debtorId = l.id
WHERE True
".$filter_AOC_date."
".$filter_AOC_salesRep."
AND i.commissionStatus IS NULL
ORDER BY i.id desc";
最后你不应该在 sql 中使用 php var 这有 sqlinject 的风险..为了避免这种情况你应该看看你的 db 驱动程序准备好的 statememnt 和绑定(bind)参数。
关于mysql - only_full_group_by 不让我按我的意愿显示表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58101608/
在查询中发现 sql_mode=only_full_group_by 错误。我尝试了很多方法来修复它。更改了 sql_mode=''。但我仍然收到此错误。 PDOException: SQLSTATE
我不小心启用了 ONLY_FULL_GROUP_BY 模式,如下所示: SET sql_mode = 'ONLY_FULL_GROUP_BY'; 如何禁用它? 最佳答案 解决方案 1:从 mysql
这个问题已经有答案了: Error related to only_full_group_by when executing a query in MySql (18 个回答) 已关闭 5 年前。 我
数据库错误错误:SQLSTATE[42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #27 不在 GROUP BY 子句中,并且包含非聚合列“erp.CFPG.id”,该列在功能
请帮助我纠正 SQL 语法: SELECT DISTINCT kodemk, a.namamk, a.sks, IF( b.status='K', 0, a.smt ) as smt, a.k
我试图让下面的语句与 mysql v5.7.5 一起工作,尽管我真的完全不理解错误消息中的措辞,而且文档也没有帮助我。 有问题的 SQL 语句: SELECT YEARWEEK
我有一个带有 MySQL 服务器版本 5.7.27 的新 VPS 服务器。在这个新的 VPS 中,我上传了一个数据库和一些代码,这些代码是我从以前的服务器上获得的,该服务器具有较旧的 MySQL 服务
我在 MySQL 5.7.14 上遇到 ONLY_FULL_GROUP_BY 问题,即使我设置了 SQL 模式,我似乎也无法禁用它。 我已通过运行此命令将 @@sql_mode 设置为删除 ONLY_
我使用 mysqldump 并得到错误。在我的配置文件中,为 sql_mode 写入了属性,在 mysql 控制台全局和 session 属性中也类似。 [mysqld] sql_mode=IGNOR
我更新了 mysql,我从 MySQL 版本 5.6.17 升级到版本 5.7.14 因为我的 sql 查询有错误 的确,我的很多查询都是这样的: SELECT count (id) as nbr,
我不小心启用了这样的 ONLY_FULL_GROUP_BY 模式: SET sql_mode = 'ONLY_FULL_GROUP_BY'; 如何禁用它? 最佳答案 解决方案 1:从 mysql 控制
我正在将一些旧的 SS 2.4 代码升级到 SS4。执行以下查询时出现以下错误: 错误: Expression #1 of SELECT list is not in GROUP BY clause
我在数据库 mysql (5.7.21) 中有一个表,如下所示: +----------+--------------+-----------+-----------+| id_price | id_
版本:Plesk Onyx v17.8.11_build1708180301.19操作系统:Ubuntu 16.04.4 LTS 在我的日志中出现此错误: AH01071: Got error 'PH
我想要获取“订单”表中但不在“客户”表中的客户。 “快速订购”客户。我写了这个查询: SELECT `email`, `firstname` , `lastname`, `telephone`, `i
我有以下查询: SELECT f.flight_number, f.flight_date, f.airport, a.iata, a.iso3166 AS airport_country_code,
我有这个数据 1 => blue, 2 => red, 3 => red 我想要的是: [1, 2] 禁用 MySql 严格模式,或更具体地说,禁用 ONLY_FULL_GROUP_BY - 我可以做
我正在运行这个 SQL 语句: SELECT *, GROUP_CONCAT(contact) AS contact FROM table4, table3, table2, tab
我尝试将SQLAlchemy的group_by()函数与mysql+mysqlconnector引擎一起使用: rows = session.query(MyModel) \ .ord
SELECT DISTINCT `A/C#` AS `A/C#`, `MyRef` AS `MyRef`, DATEDIFF('2017-06-30', `Date`) AS
我是一名优秀的程序员,十分优秀!