SQL: select非group by的字段

简介: SQL: select非group by的字段

使用group by查找或删除重复行,请参考

在含有Group by子句的查询语句中,对select关键字后的目标列,存在以下规律

  1. 使用group by 时,select 涉及的列要么是参与分组的列,要么列包含在聚合函数中
  2. where将对分组前的所有数据进行筛选。having将对分组后的一组数据搞事情。

例如:

select a,b,avg(c),sum(d) from 表 group by a,b


select非group by的字段

  • 可以把group by的结果集当作一个表,然后从这里表里取数就可以了
  • 例如:查询,订单表中订单号重复的订单信息,分组字段是orderno,select的信息不仅有orderno,还有其他信息
SELECT
  p.id,
  p.orgcode,
  p.idserial,
  p.username,
  p.orderno,
  p.createtime,
  p.payflag,
  p.businessorderno,
  p.paytime
FROM
  pay_order_trade p,
  (
    SELECT
      orderno,
      count(*) 重复次数
    FROM
      pay_order_trade
    GROUP BY
      orderno
    HAVING
      count(1) > 1
  ) s
WHERE
  s.orderno = p.orderno
ORDER BY
  p.orderno DESC;



相关文章
|
10月前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
6月前
|
SQL
SQL中搜索中文无效或Select中文变乱码
SQL中搜索中文无效或Select中文变乱码
|
10月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】如何将mysql含有group by的SQL转换成崖山支持的SQL
本文探讨了在YashanDB(崖山数据库)中执行某些SQL语句时出现的报错问题,对比了MySQL的成功执行结果。问题源于SQL-92标准对非聚合列的严格限制,要求这些列必须出现在GROUP BY子句中,而SQL:1999及更高版本允许非聚合列直接出现在选择列中。YashanDB和Oracle遵循SQL-92标准,因此会报错。文章提供了两种解决方法:使用聚合函数处理非聚合列,或将GROUP BY与ORDER BY拆分为两层查询。最后总结指出,SQL-92标准更为严谨合理,建议开发者遵循此规范以避免潜在问题。
|
11月前
|
SQL Oracle 关系型数据库
【YashanDB 知识库】如何将 mysql 含有 group by 的 SQL 转换成崖山支持的 SQL
在崖山数据库中执行某些 SQL 语句时出现报错(YAS-04316 not a single-group group function),而这些语句在 MySQL 中能成功执行。原因是崖山遵循 SQL-92 标准,不允许选择列表中包含未在 GROUP BY 子句中指定的非聚合列,而 MySQL 默认允许这种操作。解决办法包括:使用聚合函数处理非聚合列或拆分查询为两层,先进行 GROUP BY 再排序。总结来说,SQL-92 更严格,确保数据一致性,MySQL 在 5.7 及以上版本也默认遵循此标准。
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
SQL 存储 Serverless
SQL语句拆分时间字段的技巧与方法
在数据库操作中,经常需要处理时间数据
1181 1
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
SQL
【如何成为SQL高手】第五关:select语句基本用法
【如何成为SQL高手】第五关:select语句基本用法
599 0
【如何成为SQL高手】第五关:select语句基本用法
|
SQL 存储
SQL SELECT 语句
SQL SELECT 语句
147 0
|
SQL 安全 数据库
SQL嵌套SELECT语句精讲
SQL嵌套SELECT语句精讲
737 0