sql多字段分组排序显示全部数据

摘要:
技术要求:首先,所有数据应根据三个字段分组显示,并按降序排列valueDay,以确定哪些数据具有重复。1.Groupby实现:SELECT*FROMtbl_ demoASdemoGROUPBYdemo。value_天,演示。金额,演示。payer_name,demo.idORDERBYdemo。value_dayDESC测试发现,mysql数据库可以使用groupby简单地显示在组中,但不能在sqlserver上实现相同的sql。参考2.Orderby实现:SELECT*FROMtbl_ demoASdemoORDERBYdemo。value_ dayDESC,演示。金额,演示。付款人姓名,演示。Idtips:Orderby多字段实际上可以理解为多字段拼接后的排序,完全可以实现分组显示。就个人而言,这比群策群力更容易理解。

 

建表sql

CREATE TABLE `tbl_demo` (
  `id` varchar(255) COLLATE utf8_bin NOT NULL,
  `payer_name` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `amount` int(255) DEFAULT NULL,
  `value_day` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

需求

sql多字段分组排序显示全部数据第1张   =======》sql多字段分组排序显示全部数据第2张

将图一的数据库中数据按图二规则显示在页面上。

场景:

图一数据是excel导入,所以有可能出现一条数据重复导入的现象,所以要将payerName,amout,valueDay三个字段存在重复的数据挑出来放在一起标红显示,让管理员知道这些数据可能重复 ,然后线下校对进行处理。

技术要求:

首先要对所有数据根据这三个字段进行分组显示,对valueDay降序排序明确哪条数据存在重复

实现分组显示并且排序

 1.group by(mysql)实现:

SELECT
    * 
FROM
    tbl_demo AS demo 
GROUP BY
    demo.value_day,
    demo.amount,
    demo.payer_name,
    demo.id 
ORDER BY
    demo.value_day DESC

sql多字段分组排序显示全部数据第3张

测试发现,mysql数据库可以用group by简单实现分组显示,但是相同的sql在sql server上却无法实现。

参考

2.order by实现:

SELECT
    * 
FROM
    tbl_demo AS demo 
ORDER BY
    demo.value_day DESC,
    demo.amount,
    demo.payer_name,
    demo.id

sql多字段分组排序显示全部数据第4张

 tips:order by多字段其实可以理解为将多字段拼接之后进行排序,完全可以实现分组显示,个人觉得比group by还要容易理解一些。

实现明确哪条数据重复

实现逻辑:

先用上面的sql查出所有数据,然后在sql中对查出的每条数据做一个子查询,查找当前数据在表中是否有重复数据。

SELECT
    *,
CASE
        
        WHEN (
        SELECT
            count( * ) 
        FROM
            tbl_demo AS d 
        WHERE
            d.value_day = demo.value_day 
            AND d.amount = demo.amount 
            AND d.payer_name = demo.payer_name 
            ) > 1 THEN
            '重复' ELSE '未重复' 
        END AS repeatFlag 
    FROM
        tbl_demo AS demo 
    ORDER BY
        demo.value_day DESC,
        demo.amount,
    demo.payer_name,
    demo.id

sql多字段分组排序显示全部数据第5张

 tips:对于这个实现方式我没有想到更好的方式,感觉有点耗性能,哪位大佬有更好的方式可以留言告诉我。

免责声明:文章转载自《sql多字段分组排序显示全部数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇10款免费开源图表插件推荐gulp使用笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL基础

一、MySQL概述 1、什么是数据库 ?答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?答:他们均是一个软件,都有两个主要的功能: a. 将数据保存到文件或内存b. 接收特定的命令,然后对文件进行相应的操作3、什么是SQL ?答:...

python 之 数据库(修改表、复制表、删除表、单表查询)

10.8 修改表、复制表、删除表 10.81 修改表 alter table 1. 修改表名 alter table表名 rename 新表名; 2. 增加字段 alter table 表名 add 字段名 数据类型 [完整性约束条件…]; alter table t1 add stu char(10) not nullafter name;...

mysql之排序查询

文章目录 进阶3:排序查询 特点: 1、按单个字段排序 案例1:查询员工信息,要求工资从高到低排序 2、添加筛选条件再排序 案例1:查询部门编号>=90的员工信息,并按员工编号降序 案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序 3、按表达式排序 案例1:按年薪的高低显示员工的信息和年薪 4、按别名排序 案例1:查...

MySQL(三) 数据库表的查询操作【重要】

      序言           1、MySQL表操作(创建表,查询表结构,更改表字段等),           2、MySQL的数据类型(CHAR、VARCHAR、BLOB,等),           本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对于INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(...

MySQL排序原理与MySQL5.6案例分析【转】

本文来自:http://www.cnblogs.com/cchust/p/5304594.html,其中对于自己觉得是重点的加了标记,方便自己查阅。更多详细的说明可以看沃趣科技的文章说明。 前言      排序是数据库中的一个基本功能,MySQL也不例外。用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Gr...

MySQL SQL优化

前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧。 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础。 优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO...