您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

bubuko 2022/1/25 20:09:52 其他 字数 6884 阅读 953 来源 http://www.bubuko.com/infolist-5-1.html

建表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 ...

 

建表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

 

需求

技术分享图片   =======》技术分享图片

 

 

 

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

场景:

图一数据是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

技术分享图片

 

 

测试发现,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

技术分享图片

 

 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

技术分享图片

 

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

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

原文:https://www.cnblogs.com/qingshan-tang/p/12371475.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶