You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL技术问询:如何实现单列DISTINCT且关联唯一的其他列数据?

解决方法

你当前的问题是DISTINCT是对整行数据去重,只要billing_city和invoice_id的组合不同,就会被保留,所以同一城市对应多个订单ID时,城市名会重复出现。要实现每个城市只显示一次并关联一个订单ID,有两种常用方案:

方案1:使用GROUP BY + 聚合函数

如果不关心具体取哪个订单ID,只想每个城市关联一个(比如最早或最晚的订单),可以用MIN()或MAX()聚合函数配合GROUP BY:

SELECT billing_city, MIN(invoice_id) AS invoice_id
FROM invoice
GROUP BY billing_city
ORDER BY invoice_id;
  • 用MIN(invoice_id)会取每个城市对应的最小订单ID,换成MAX(invoice_id)则取最大的,根据你的需求选择即可。

方案2:使用窗口函数(更灵活)

如果需要自定义选择订单ID的规则(比如按订单日期排序取最新的),可以用窗口函数ROW_NUMBER():

SELECT billing_city, invoice_id
FROM (
    SELECT billing_city, invoice_id,
           -- 按城市分组,每组内按invoice_id排序,给行编号
           ROW_NUMBER() OVER (PARTITION BY billing_city ORDER BY invoice_id) AS rn
    FROM invoice
) t
WHERE rn = 1 -- 只取每组的第一行
ORDER BY invoice_id;
  • 把ORDER BY invoice_id改成你需要的排序字段(比如order_date DESC),就能按指定规则选择要保留的订单ID。

内容的提问来源于stack exchange,提问作者Viego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:53:10