如何使用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
相关产品推荐
相关产品推荐

