我用WAMP服务器在我的windows PC上使用MySQL 5.7.13

我的问题是在执行这个查询时

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

我总是得到这样的错误

SELECT列表中的表达式#1不在GROUP BY子句中,包含未聚合的列returntr_prod.tbl_customer_pod_uploads。id',它不依赖于GROUP BY子句中的列;这与sql_mode=only_full_group_by不兼容

你能告诉我最好的解决办法吗?

我需要这样的结果

+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
| id | user_id | load_id | bill_id | latitude | langitude | proof_type | document_type | file_name    | is_private | status | createdon           | updatedon           |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+
|  1 |       1 | 78      | 1       | 21.1212  | 21.5454   |          1 |             1 | id_Card.docx |          0 | Active | 2017-01-27 11:30:11 | 2017-01-27 11:30:14 |
+----+---------+---------+---------+----------+-----------+------------+---------------+--------------+------------+--------+---------------------+---------------------+

当前回答

Hi不是获取所有列,而是使用ANY_VALUE(column_name)获取所需的列。它工作得很完美。只是检查。

例如:

SELECT proof_type,any_value("customer_name") as customer_name
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`

其他回答

only_full_group_by = on告诉MySQL引擎:当你怀疑要显示什么结果并抛出错误时,不要应用GROUP BY。只有当Group By明确告诉您要做什么时才应用它。即当Group By已满且完全时!

only_full_group_by = off告诉MySQL引擎:总是应用GROUP BY,如果你对选择什么结果有疑问,就随机选择一个!

如果你正确使用GROUP BY,你不必关闭它!

例子:

表:用户

 id   |  name
----------------
  1      ali
  2      john
  3      ali

在name列上使用GROUP BY时:

SELECT * FROM users GROUP BY name;

有两种可能的结果:

  1      ali
  2      john     

OR

  2      john
  3      ali

MYSQL不知道选择什么结果!因为有不同的id,但都有name=ali。

Solution1:

只选择名称字段:

SELECT name FROM users GROUP BY name;

结果:

  ali
  john     

这是一个完美的解决方案。删除使GROUP BY混淆的列。这意味着你知道你在做什么。通常,你不需要 这些列,但如果您需要它们,请转到解决方案3!

Solution2:

关闭only_full_group_by。MYSQL将从两个可能的结果中随机选择一个!!(如果您不关心它将选择什么id,这是可以的,但请记住在查询后立即打开它,以防止将来的groupby中出现意外行为)

环境

使用像MIN(), MAX()这样的聚合函数来帮助MYSQL决定它必须选择什么。

例如:

SELECT MAX(id), name FROM users GROUP BY name;

它将选择具有最大id的ali行:

  2      john     
  3      ali

我有类似的问题,我的部分数据库崩溃。我所做的是通过PHPStorm数据库控制台更改DB中的参数,如下所示:

   SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

现在工作很有魅力

有时候你只需要检查你的查询是否有正确的Order和Order的方式。

GROUP BY pp.id_product
FIELD(pp.id_product, 1600, 1870, 2300 );

除非将排序方式(DESC或ASC)添加到查询中,否则该命令不会运行

GROUP BY pp.id_product
FIELD(pp.id_product, 1600, 1870, 2300 ) DESC;

这将在不破坏服务器的会话和全局设置的情况下完成任务。

Hi不是获取所有列,而是使用ANY_VALUE(column_name)获取所需的列。它工作得很完美。只是检查。

例如:

SELECT proof_type,any_value("customer_name") as customer_name
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`

还可以简单地将GROUP_CONCAT()添加到非聚合列中。

像GROUP_CONCAT (your_column)