如果除一列之外的所有值都相等,则显示一行
Posted
技术标签:
【中文标题】如果除一列之外的所有值都相等,则显示一行【英文标题】:Show one row if all values except one column are equal 【发布时间】:2020-10-01 17:31:34 【问题描述】:我通常按产品显示订单的运输状态。但是当除“项目”之外的所有值都相同时,我希望只显示一行(哪一行无关紧要)。我尝试了SELECT DISTINCT
和GROUP 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 查询从表中选择除一列之外的所有内容? [复制]
如何将 summarise_each 应用于除一列之外的所有列? [复制]
如何从python中的数组(或矩阵)中提取除一列之外的所有列?