【问题标题】:MSSQL Query should return same as MYSQLMSSQL 查询应返回与 MYSQL 相同的结果
【发布时间】:2015-02-03 14:23:43
【问题描述】:

我有 MYSQL 查询并且工作正常 查询是:

select tst_type, count(tst_type) tot from tst_type where project='JupiQA';

上面的查询返回单个记录如果我在这个查询中添加GROUP BY tst_type,它会返回多个值。

我在 MSSQL 中尝试的没有GROUP BY tst_type 的查询,它显示错误

错误是:选择列表中的列“tst_type.tst_type”无效 因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句。

之后在 MSSQL 查询中添加GROUP BY tst_type,然后工作正常并返回多个值。

但我的要求是它应该返回与 MYSQL 相同而不添加 GROUP BY fn 或者应该返回单个值,如 MYSQL

【问题讨论】:

  • 那条记录在您的第一个查询中代表什么?该特定tst_type 记录的总数,还是所有记录的计数?
  • 返回所有记录的总数。

标签: sql-server mssql-jdbc


【解决方案1】:

MySQL 允许这种行为,但我不知道任何其他允许这种行为发生的 DBMS。如果您希望 MySQL 和 MSSQL 查询行为相同,请添加 SQL 模式 ONLY_FULL_GROUP_BY。 MySQL 现在将正确地抛出错误。

还可以查看此 SO 帖子: Why does MySQL allow "group by" queries WITHOUT aggregate functions?

【讨论】:

    【解决方案2】:

    当您在此处执行COUNT() 时,需要GROUP BY 才能获得正确的结果。见MySQL docs on the function

    您可以使用不带任何其他字段的count(*) 来获取记录总数。否则,您必须使用GROUP BY

    恕我直言,您对此查询的要求是向后的;当 select 中包含非聚合字段时,聚合函数需要 GROUP BY 正确/一致地运行。 MSSQL 正常运行,MySQL 不正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-24
      • 2021-12-18
      • 2021-11-27
      • 2022-06-11
      • 2017-12-09
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多