首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql中隐藏重复数据

在sql中隐藏重复数据
EN

Stack Overflow用户
提问于 2020-08-19 19:22:37
回答 4查看 83关注 0票数 0

我想要一些参考,我可以用在我的研究SQL,我目前正在做一份报告,我将隐藏重复的数据,并保留独特的数据。

我的示例是表sales中有三列:

  • 水果
  • 采购商
  • 购果量

--我现在的进展

代码语言:javascript
复制
FRUIT   PURCHASER QUANTITY
APPLE   BAN       11
APPLE   BEN       2
MANGO   BON       9
MANGO   BUN       10
MANGO   BAAN      10
ORANGE  BAIN      5
ORANGE  BAON      3

-我的目标输出

代码语言:javascript
复制
FRUIT   PURCHASER QUANTITY
APPLE   BAN       11
        BEN       2
MANGO   BON       9
        BUN       10
        BAAN      10
ORANGE  BAIN      5
        BAON      3

谢谢

EN

回答 4

Stack Overflow用户

发布于 2020-08-19 19:28:07

你点了什么菜?您可以使用窗口函数。ROW_NUMBER()是一个窗口函数,它为结果集中的分区中的每一行分配一个顺序整数。

在您的情况下,您需要按结果进行分区,并决定所需行的顺序。

如果您通过降序按数量订购:

代码语言:javascript
复制
select 
    case when num=1 then FRUIT else '' end as FRUIT, PURCHASER, QUANTITY
    from
    (
       select *,row_number()over(partition by FRUIT order by QUANTITY desc)num 
       from Table
    )x
    Order by FRUIT, num

如果需要由购买者订购,请尝试以下查询:

代码语言:javascript
复制
select 
    case when num=1 then FRUIT else '' end as FRUIT, PURCHASER, QUANTITY
    from
    (
       select *,row_number()over(partition by FRUIT order by PURCHASER)num 
       from Table
    )X
  Order by FRUIT, num
票数 3
EN

Stack Overflow用户

发布于 2020-08-19 19:37:18

首先,了解哪些类型的操作适合数据库,哪些不适合,这一点很重要。虽然这是可以做到的,但这并不是真正合适的。

第二,它不合适的原因是每一行都应该是独立的。除非有显式的order by,否则不会排序结果集。有时候,它们看起来好像是按照特定的顺序来的,但只有order by才能保证。

您可以在SQL中做您想做的事情,但是您必须小心查询的构造方式。基本逻辑是一个case表达式:

代码语言:javascript
复制
select (case when row_number() over (partition by fruit order by purchaser desc) = 1
             then fruit
        end) as fruit, purchaser, quantity
from t
order by fruit, purchaser;

甚至这个版本也有一个潜在的错误:如果一个水果有两行最大数量,那么两个order bys可以以不同的顺序返回绑定值--这意味着水果名出现在第二行。

这意味着一个子查询,因此row_number()只能计算一次,并且可以直接在order by中使用。

代码语言:javascript
复制
select (case when seqnum = 1
             then fruit
        end) as fruit, purchaser, quantity
from (select t.*,
             row_number() over (partition by fruit order by purchaser) as seqnum
      from t
     ) t
order by fruit, seqnum;
票数 1
EN

Stack Overflow用户

发布于 2020-08-19 19:37:49

太新了,不好意思。

这可以用SQL来完成,但是,开发可重用的数据集通常对您有好处。您要寻找的演示文稿类型将更典型地在表示层(而不是数据/ sql层)完成。

你在使用哪种报告工具?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63493670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档