sql - 查询返回 N 个随机连接的记录
问题描述
我接到了一项任务,我需要从一个表中返回所有公司的列表,并使用 Microsoft SQL Server 从另一个表中返回与该公司关联的 3 个随机电子邮件地址的逗号分隔列。到目前为止,我已经能够以随机顺序获取公司和所有关联的电子邮件地址,但我现在需要将此列表限制为 3 个。每个公司至少有 4 个关联的电子邮件地址,但可以想象有数百个。这是我的SQL。
SELECT c.ID, c.companyName,
STRING_AGG(e.emailAddress, ', ') WITHIN GROUP (ORDER BY NEWID()) AS eMailAddress
FROM companies c
INNER JOIN email e ON e.companyID = c.ID
GROUP BY c.ID, c.companyName
我很感激对此的任何想法。
解决方案
只有CROSS APPLY
3 个电子邮件地址:
SELECT c.ID, c.companyName,
STRING_AGG(e.emailAddress, ', ') AS eMailAddress
FROM companies c
CROSS APPLY (
SELECT TOP 3 *
FROM email e
WHERE e.companyID = c.ID
ORDER BY NEWID()
) e
GROUP BY c.ID, c.companyName;
推荐阅读
- php - 将对象转换为 laravel 分页
- perl - 如何存储在 Perl 脚本中加密的数据库密码?
- c - 比较 2 个线性/连续 2D 阵列
- python - 比较熊猫数据框中的两个字符串并显示差异
- python-3.x - 在 Azure 函数中使用类和外部 py 文件
- multithreading - 处理 Scala 期货内存不足错误
- react-native - React Flatlist - 尝试订购商品数据
- vb.net - 从 VB.net 代码上的 WIndows server 2008 迁移到 Windows server 2016 后,MICR 符号在输出设备上呈现较小
- amazon-web-services - 为什么我没有得到有关我的 AWS IAM 身份的详细信息?未知输出类型:JSON
- javascript - 重新渲染过多(React、useState)