select一位顾客的随机订单

select a random order of a customer

我有 table 个客户和他们的订单。我想 select 每个客户的随机订单。

示例table

customer | orders
---------+---------
customerA| Order1
customerA| Order2
CustomerA| Order3
customerB| Order1
customerB| Order2
customerB| Order3
CustomerC| Order1
customerC| Order2

结果table

customer | orders
---------+---------
customerA| Order2
customerB| Order1
CustomerC| Order1

有办法吗?

您可以使用 row_number()(和 ANSI 标准函数)。但是,计算随机数因数据库而异。这是想法:

select t.*
from (select t.*,
             row_number() over (partition by customer order by random()) as seqnum
      from t
     ) t
where seqnum = 1;

一些随机数函数:

  • SQL 服务器:newid()
  • Postgres: random()
  • 甲骨文:dbms_random.value
  • 天睿数据:random(1, 999999999)
  • DB2:rand()
  • SAP 花:rand()