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

如何使用SQL的IN语句从指定店铺各选取1条随机商品?

从指定店铺各获取一条随机商品的SQL实现

你当前的SQL语句会返回所有属于这4个店铺的商品,因此会出现同一store_id对应多条记录的情况。要实现每个指定店铺仅返回一条随机商品,可以利用窗口函数结合随机排序来实现,以下是不同数据库环境下的具体写法:

MySQL / MariaDB

SELECT store_id, title
FROM (
    SELECT 
        store_id, 
        title,
        ROW_NUMBER() OVER (PARTITION BY store_id ORDER BY RAND()) AS rn
    FROM products
    WHERE store_id IN (1, 34, 45, 100)
) t
WHERE rn = 1;

PostgreSQL

SELECT store_id, title
FROM (
    SELECT 
        store_id, 
        title,
        ROW_NUMBER() OVER (PARTITION BY store_id ORDER BY RANDOM()) AS rn
    FROM products
    WHERE store_id IN (1, 34, 45, 100)
) t
WHERE rn = 1;

SQL Server

SELECT store_id, title
FROM (
    SELECT 
        store_id, 
        title,
        ROW_NUMBER() OVER (PARTITION BY store_id ORDER BY NEWID()) AS rn
    FROM products
    WHERE store_id IN (1, 34, 45, 100)
) t
WHERE rn = 1;

核心逻辑说明

  • PARTITION BY store_id:按店铺ID分组,确保每个店铺的商品单独处理
  • ORDER BY RAND()/RANDOM()/NEWID():在每组内随机排序,保证每次查询返回的商品是随机的
  • WHERE rn = 1:只取每组排序后的第一条记录,即每个店铺的一条随机商品

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:51:15