mysql - 运行此查询而不更改 sql_mode

标签 mysql sql group-by sql-mode

我正在尝试在测试环境中测试查询,如下所示

查询:-

 SELECT a.aggreatorid AS aggreatorid, '' AS txndesc, DATE_FORMAT(DATE(b.txndate),'%d/%m/%Y') AS txndate,
  SUM(txncredit) AS txncredit, SUM(txndebit) AS txndebit  
  FROM  walletmast a INNER JOIN wallettransaction b ON a.walletid=b.walletid  
  AND txndate  BETWEEN CURDATE() - INTERVAL 3 DAY AND CURDATE()  
  GROUP BY a.aggreatorid, DATE(b.txndate)
  ORDER BY txndate DESC

查询抛出以下

错误:-

SQL Error (1055): 'digitalpurse.b.txnDate' isn't in GROUP BY

查询在我的本地环境中有效,但在测试环境中无效,经过大量搜索后我发现测试环境具有 sql_modes ,出于应用程序流程和安全目的无法更改

SQL 模式:-

 @@sql_mode                                                                                                                                |
+------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,
STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION |

有没有办法在不更改 sql_mode 的情况下运行此查询? 如果需要任何其他信息,请告诉我。预先感谢您:D

最佳答案

将查询移动到选择DATE(b.txndate)的子查询中,以便它与GROUP BY子句匹配,然后在主查询中执行格式化.

SELECT aggreatorid, '' AS txndesc, DATE_FORMAT(txndate, '%d/%m/%Y') AS txndate,
    txncredit, txndebt
FROM (
    SELECT a.aggreatorid AS aggreatorid, DATE(b.txndate) AS txndate,
        SUM(txncredit) AS txncredit, SUM(txndebit) AS txndebit  
    FROM  walletmast a 
    INNER JOIN wallettransaction b ON a.walletid=b.walletid  
    WHERE txndate BETWEEN CURDATE() - INTERVAL 3 DAY AND CURDATE()  
    GROUP BY a.aggreatorid, DATE(b.txndate)
) AS x
ORDER BY txndate DESC

关于mysql - 运行此查询而不更改 sql_mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41801510/

相关文章:

MySql案例何时总结表格

php - 循环矩阵值

java - 在 MySQL 中写入时间

MySQL - 拆分分隔的左右值

python使用默认函数聚合groupby

mysql - 如何在 SQL 中合并两个表?

php - 在php中使用post更新记录时,页面会刷新

mysql - 在 SQL 中汇总不同货币的销售额

C# LINQ,如果没有找到(时间),选择上一个/复制上一个结果

Python:groupby 和聚合 > 添加到原始 df