相关疑难解决方法(0)

禁用ONLY_FULL_GROUP_BY

我不小心启用了ONLY_FULL_GROUP_BY这样的模式:

SET sql_mode = 'ONLY_FULL_GROUP_BY';
Run Code Online (Sandbox Code Playgroud)

我该如何禁用它?

mysql mysql-workbench

538
推荐指数
25
解决办法
72万
查看次数

MySQL之前按顺序排序

这里有很多类似的问题,但我认为没有充分回答这个问题.

我会从当前最流行的问题继续,并使用他们的例子,如果这没关系.

此实例中的任务是获取数据库中每个作者的最新帖子.

示例查询产生不可用的结果,因为它并不总是返回的最新帖子.

SELECT wp_posts.* FROM wp_posts
    WHERE wp_posts.post_status='publish'
    AND wp_posts.post_type='post'
    GROUP BY wp_posts.post_author           
    ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)

目前接受的答案是

SELECT
    wp_posts.*
FROM wp_posts
WHERE
    wp_posts.post_status='publish'
    AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
HAVING wp_posts.post_date = MAX(wp_posts.post_date) <- ONLY THE LAST POST FOR EACH AUTHOR
ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个答案简单明了,并且在很多情况下产生的结果不如原始查询那么稳定.

我最好的解决方案是使用表单的子查询

SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author 
Run Code Online (Sandbox Code Playgroud)

我的问题是一个简单的问题: 无论如何在分组之前订购行而不诉诸子查询?

编辑:这个问题是另一个问题的延续,我的情况细节略有不同.您可以(并且应该)假设还有一个wp_posts.id,它是该特定帖子的唯一标识符.

mysql group-by sql-order-by

228
推荐指数
5
解决办法
31万
查看次数

GROUP BY没有聚合函数

我试图理解没有聚合函数的GROUP BY (新的oracle dbms).
它是如何运作的?
这是我尝试过的.

我将运行我的SQL的EMP表.
EMP表

SELECT ename , sal
FROM emp
GROUP BY ename , sal
Run Code Online (Sandbox Code Playgroud)

结果

SELECT ename , sal  
FROM emp  
GROUP BY ename;  
Run Code Online (Sandbox Code Playgroud)

结果

ORA-00979:不是GROUP BY表达式
00979. 00000 - "不是GROUP BY表达式"
*原因:
*操作:行
错误:397列:16

SELECT ename , sal  
FROM emp  
GROUP BY sal;  
Run Code Online (Sandbox Code Playgroud)

结果

ORA-00979:不是GROUP BY表达式
00979. 00000 - "不是GROUP BY表达式"
*原因:
*操作:行错误:411列:8

SELECT empno , ename , sal  
FROM emp  
GROUP BY sal , ename;  
Run Code Online (Sandbox Code Playgroud)

结果

ORA-00979:不是GROUP BY表达式
00979. 00000 - "不是GROUP BY表达式"
*原因: …

sql oracle group-by aggregate-functions

60
推荐指数
6
解决办法
13万
查看次数

#1055 - SELECT列表的表达式不在GROUP BY子句中,并且包含非聚合列,这与sql_mode = only_full_group_by不兼容

我的查询:

select libelle,credit_initial,disponible_v,sum(montant) as montant 
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee 
and annee = year(current_timestamp) GROUP BY libelle order by libelle asc
Run Code Online (Sandbox Code Playgroud)
  • Mysql 5.7.9运行查询没有任何问题,但mysql 5.7.12显示上面的错误你可以帮助我

mysql mysql-error-1055

52
推荐指数
8
解决办法
10万
查看次数

SELECT列表不在GROUP BY子句中,并包含非聚合列

收到以下错误:

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'world.country.Code' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)

运行以下查询时:

select countrylanguage.language, country.code, sum(country.population*countrylanguage.percentage/100)
from countrylanguage
join country on countrylanguage.countrycode = country.code
group by countrylanguage.language
order by sum(country.population*countrylanguage.percentage) desc ;
Run Code Online (Sandbox Code Playgroud)

使用MySQL世界测试数据库(http://dev.mysql.com/doc/index-other.html).不知道为什么会这样.目前正在运行MYSQL 5.7.10.

有任何想法吗???:o

mysql sql aggregate mysql-error-1055

32
推荐指数
2
解决办法
12万
查看次数

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#3不在GROUP BY子句中并包含nonaggregated

当我将ubuntu从15.10升级到16.04时,我在yii2项目中有这个错误

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3
of SELECT list is not in GROUP BY clause and contains nonaggregated column 
'iicityYii.opportunity_conditions.money' which is not functionally dependent 
on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)

正在执行的SQL是:

SELECT SUM(oc.money),op.id,oc.money,
            op.mantaghe,
            op.`time`, op.`id`, `op`.`logo`,
           `pd`.`user_id`, `op`.`name`, 
           `pd`.`co_name`, `op`.`address`, 
           `op`.`project_type_id`, `op`.`state_id`
FROM `opportunity` op 
INNER JOIN `profile_details` pd  ON op.user_id=pd.user_id  
INNER JOIN `opportunity_conditions` oc ON   op.id=oc.opportunity_id
GROUP BY `op`.`id`
ORDER BY `op`.`id` DESC
Run Code Online (Sandbox Code Playgroud)

怎么解决我的问题?

mysql ubuntu yii2

29
推荐指数
5
解决办法
5万
查看次数

如何在laravel eloquent中解决与sql_mode = only_full_group_by不兼容的问题?

我的laravel雄辩是这样的:

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();
Run Code Online (Sandbox Code Playgroud)

执行时,会出现如下错误:

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列'myshop.products.id',它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容(SQL:select*from productswhere status= 1 and stock> 0 and category_id= 5 group by store_id order by updated_atdesc limit 4)

我该如何解决?

php mysql laravel-5 laravel-5.3 laravel-eloquent

14
推荐指数
9
解决办法
2万
查看次数

如何通过查询在数百万行中优化计数和排序

在优化order by和count查询时需要帮助,我有数百万(约3百万)行的表.

我必须连接4个表并获取记录,当我运行简单查询时,它只需要毫秒才能完成,但是当我尝试通过离开连接表来计数或排序时,它会无限期地停留.

请参阅以下案例.

DB服务器配置:

CPU Number of virtual cores: 4
Memory(RAM): 16 GiB
Network Performance: High
Run Code Online (Sandbox Code Playgroud)

每张表中的行:

tbl_customers -  #Rows: 20 million.
tbl_customers_address -  #Row 25 million.
tbl_shop_setting - #Rows 50k
aio_customer_tracking - #Rows 5k
Run Code Online (Sandbox Code Playgroud)

表格架构:

CREATE TABLE `tbl_customers` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `shopify_customer_id` BIGINT(20) UNSIGNED NOT NULL,
    `shop_id` BIGINT(20) UNSIGNED NOT NULL,
    `email` VARCHAR(225) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
    `accepts_marketing` TINYINT(1) NULL DEFAULT NULL,
    `first_name` VARCHAR(50) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
    `last_name` VARCHAR(50) NULL DEFAULT …
Run Code Online (Sandbox Code Playgroud)

mysql database database-administration

14
推荐指数
2
解决办法
515
查看次数

MySQL Left Join + Min

看似简单的MySQL问题,但我以前从来没有这样做过..

我有两张桌子,物品和价格,有一对多的关系.

Items Table
id, name

Prices Table
id, item_id, price
Run Code Online (Sandbox Code Playgroud)

哪里

prices.item_id = items.id
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

SELECT items.id, items.name, MIN(prices.price)
FROM items
LEFT JOIN prices ON items.id = prices.item_id
GROUP BY items.id
Run Code Online (Sandbox Code Playgroud)

如何以最低价格返回相应的price.id?谢谢!

mysql group-by min left-join greatest-n-per-group

13
推荐指数
2
解决办法
2万
查看次数

Laravel Eloquent,按月/年分组

我正在尝试按月和年分组我的数据.

$data ->select(DB::raw('count(id) as `data`'),DB::raw('YEAR(created_at) year, MONTH(created_at) month'))
           ->groupby('year','month')
           ->get();
Run Code Online (Sandbox Code Playgroud)

输出是:

{
"data": 19215,
"year": 2016,
"month": 10
},
Run Code Online (Sandbox Code Playgroud)

如果我只按月分组,我不知道哪个年份属于这个月,我的预期输出是:

{
"clicks": 19215,
"month": 11-2016,
},
{
"clicks": 11215,
"month": 12-2016,
Run Code Online (Sandbox Code Playgroud)

},

我想在sql中,而不是在PHP中.

php sql eloquent laravel-5

6
推荐指数
4
解决办法
2万
查看次数