如果除一列之外的所有值都相等,则显示一行

Posted

技术标签:

【中文标题】如果除一列之外的所有值都相等,则显示一行【英文标题】:Show one row if all values except one column are equal 【发布时间】:2020-10-01 17:31:34 【问题描述】:

我通常按产品显示订单的运输状态。但是当除“项目”之外的所有值都相同时,我希望只显示一行(哪一行无关紧要)。我尝试了SELECT DISTINCTGROUP BY,但我需要排除“项目”列。

| item | status  | ship_date  | est_ship_date | order_num | tracking_number |
-----------------------------------------------------------------------------
| abc  | Shipped | 2020-06-01 | 2020-06-01    | 123       | xyz             |
| cde  | Shipped | 2020-06-01 | 2020-06-01    | 123       | xyz             |
| efg  | Shipped | 2020-06-01 | 2020-06-01    | 123       | xyz             |

我尝试过的:

SELECT DISTINCT item, status, ship_date, est_ship_date, order_num, tracking_number 
from orders
where order_num = 123

我知道如果我排除项目,我会得到一排,但我必须保留它。我无法排除“项目”

【问题讨论】:

【参考方案1】:

你可以使用row_number():

select *
from (
    select 
        t.*,
        row_number() over(
            partition by status, ship_date, est_ship_date, order_num, tracking_number
            order by item
        ) rn
    from mytable t 
) t
where rn = 1

(status, ship_date, est_ship_date, order_num, tracking_number) 上存在重复项时,这将为您提供具有最小item 的行。

另一个选项是聚合(它有效,因为您只排除一列):

select status, ship_date, est_ship_date, order_num, tracking_number, min(item) item
from mytable
group by status, ship_date, est_ship_date, order_num, tracking_number

【讨论】:

row_number中的表名是哪一个 @EvikGhazarian:那是mytable 聚合工作谢谢。第一个选择仍然是返回多行

以上是关于如果除一列之外的所有值都相等,则显示一行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]

返回除一列中具有重复 ID 的行之外的所有列

如何将 summarise_each 应用于除一列之外的所有列? [复制]

如何从python中的数组(或矩阵)中提取除一列之外的所有列?

如何在一个除一列之外的所有列都相同的 Pandas DataFrame 中合并观察结果?

使用 T-SQL 中的 OVER 子句在除一列之外的所有列上选择 DISTINCT