我已经升级了我的系统,并为我正在处理的Web应用程序安装了MySql 5.7.9和php.我有一个动态创建的查询,当在旧版本的MySql中运行时,它可以正常工作.自升级到5.7后,我收到此错误:
SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列'support_desk.mod_users_groups.group_id',它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容
请注意有关服务器SQL模式主题的Mysql 5.7的手册页.
这是给我带来麻烦的查询:
SELECT mod_users_groups.group_id AS 'value',
group_name AS 'text'
FROM mod_users_groups
LEFT JOIN mod_users_data ON mod_users_groups.group_id = mod_users_data.group_id
WHERE mod_users_groups.active = 1
AND mod_users_groups.department_id = 1
AND mod_users_groups.manage_work_orders = 1
AND group_name != 'root'
AND group_name != 'superuser'
GROUP BY group_name
HAVING COUNT(`user_id`) > 0
ORDER BY group_name
Run Code Online (Sandbox Code Playgroud)
我在这个问题上做了一些谷歌搜索,但我不明白only_full_group_by弄清楚我需要做些什么来修复查询.我可以关掉这个only_full_group_by选项,还是我需要做些什么呢?
如果您需要更多信息,请与我们联系.
我有一个包含以下字段的表:
id (Unique)
url (Unique)
title
company
site_id
Run Code Online (Sandbox Code Playgroud)
现在,我需要删除具有相同的行title, company and site_id.一种方法是使用以下SQL和脚本(PHP):
SELECT title, site_id, location, id, count( * )
FROM jobs
GROUP BY site_id, company, title, location
HAVING count( * ) >1
Run Code Online (Sandbox Code Playgroud)
运行此查询后,我可以使用服务器端脚本删除重复项.
但是,我想知道是否只能使用SQL查询来完成.
如何获得包含每个分组集的最大值的行?
我在这个问题上看到了一些过于复杂的变化,没有一个有很好的答案.我试图把最简单的例子放在一起:
给出如下表格,包含人,组和年龄列,您将如何获得每组中最老的人?(组内的一个平局应该给出第一个字母结果)
Person | Group | Age
---
Bob | 1 | 32
Jill | 1 | 34
Shawn| 1 | 42
Jake | 2 | 29
Paul | 2 | 36
Laura| 2 | 39
Run Code Online (Sandbox Code Playgroud)
期望的结果集:
Shawn | 1 | 42
Laura | 2 | 39
Run Code Online (Sandbox Code Playgroud) ID FirstName LastName
1 John Doe
2 Bugs Bunny
3 John Johnson
Run Code Online (Sandbox Code Playgroud)
我想DISTINCT从FirstName列中选择结果,但我需要相应的ID和LastName.
结果集只需显示一个John,但需要ID1和1 LastName的Doe.
假设您有下表(这里感兴趣的列是cid):
+-----+-------+-------+-------+---------------------+--------------+
| cid | pid | rid | clink | time | snippet |
+-----+-------+-------+-------+---------------------+--------------+
| 155 | 11222 | 1499 | 1137 | 2012-08-22 03:05:06 | hi |
| 138 | 11222 | 241 | 1136 | 2012-08-21 05:25:00 | again |
| 138 | 11222 | 241 | 1135 | 2012-08-21 05:16:40 | hi |
| 155 | 11222 | 1499 | 1134 | 2012-08-21 05:11:00 | hi cute |
| 140 | 11222 | …Run Code Online (Sandbox Code Playgroud) 该站点生成结果,但SELECT COUNT和SELECT查询与GROUP BY有两个不同的结果计数.这可能是由于phpmyadmin中显示的错误而不是网站上显示的错误.
查询:
SELECT count(DISTINCT `name`) as `numrows` FROM `users` WHERE `verified` = '1'
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name` ORDER BY `count` DESC LIMIT 0, 25
Run Code Online (Sandbox Code Playgroud)
PhpMyAdmin提供以下错误:
1055 - 'main.users.type'不在GROUP BY中
在阅读MySQL文档时,我仍然不清楚我必须解决的问题.我似乎无法掌握这一点.
我有一个使用以下语句创建的Postgres表.此表由另一个服务的数据转储填充.
CREATE TABLE data_table (
date date DEFAULT NULL,
dimension1 varchar(64) DEFAULT NULL,
dimension2 varchar(128) DEFAULT NULL
) TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)
我正在构建的ETL中的一个步骤是提取它们的唯一值dimension1并将它们插入另一个中间表中.但是,在某些测试中,我发现下面的2个命令不会返回相同的结果.我希望两者都返回相同的金额.与第二个命令相比,第一个命令返回的结果更多(1466行与1504行相比).
-- command 1
SELECT DISTINCT count(dimension1)
FROM data_table;
-- command 2
SELECT count(*)
FROM (SELECT DISTINCT ON (dimension1) dimension1
FROM data_table
GROUP BY dimension1) AS tmp_table;
Run Code Online (Sandbox Code Playgroud)
有什么明显的解释吗?作为解释的替代方案,是否有任何建议检查我应该做的数据?
编辑:以下查询都返回1504(与"简单"相同DISTINCT)
SELECT count(*)
FROM data_table WHERE dimension1 IS NOT NULL;
SELECT count(dimension1)
FROM data_table;
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有以下查询构建器:
$queryBuilder = $this
->createQueryBuilder('recipient')
->leftJoin('recipient.message', 'message')
->orderBy('message.dateSent', 'DESC');
Run Code Online (Sandbox Code Playgroud)
这一直很好:)但是因为升级到Mysql 5.7我已经开始在任何地方得到这个错误:
SQLSTATE [HY000]:
一般错误:3065 子句的
表达式#1ORDER BY不在SELECT列表中,引用列'dctrn_result.date_sent_5'不在SELECT列表中;
这是不相容的DISTINCT
我已经在大多数使用DBAL图层的地方解决了这个问题,只需将项目添加到选择列表中,但我无法弄清楚如何使用此特定功能queryBuilder.
我正在尝试执行以下查询,并通过一个case语句进行选择,并通过同一case语句进行分组。
Select USER,
(CASE
WHEN value between 0 AND 2 then '0-2'
WHEN value between 3 AND 4 then '3-4'
ELSE '5+'
END) as CASE_STATEMENT ,
SUM(value)
.....
Group by user, CASE_STATEMENT
Run Code Online (Sandbox Code Playgroud)
与Hibernate一起使用JPA 2.0 Criteria API。
我的测试用例看起来像...
CriteriaBuilder cb = em.getCriteriaBuilder()
CriteriaQuery cq = cb.createQuery(Tuple)
def root = cq.from(TestEntity)
def userGet = root.get('user')
def valueGet = root.get('value')
def caseExpr =
cb.selectCase()
.when(cb.between(valueGet, 0, 2), '0-2')
.when(cb.between(valueGet, 3, 4), '3-4')
.otherwise('5+')
def sumExpr = cb.sum(valueGet)
cq.multiselect([userGet, caseExpr, sumExpr])
cq.groupBy([userGet, caseExpr])
log(typedQuery.unwrap(Query).queryString) …Run Code Online (Sandbox Code Playgroud) mysql ×8
sql ×6
criteria-api ×1
doctrine-orm ×1
duplicates ×1
groovy ×1
group-by ×1
hibernate ×1
java ×1
jpa ×1
phpmyadmin ×1
postgresql ×1
symfony ×1