

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Differential Privacy 查询技巧和示例
<a name="dp-query-tips-examples"></a>

AWS Clean Rooms 差异隐私使用[通用查询结构](dp-sql-capabilities.md)来支持各种 SQL 结构，例如用于数据准备的公用表表达式 (CTEs) 和常用的聚合函数`COUNT`，例如、或。`SUM`为了通过在运行时向聚合查询结果添加噪音来混淆任何可能的用户在数据中的贡献，Difersient Privacy 要求最终`SELECT statement`版本中的聚合函数在用户级数据上运行。 AWS Clean Rooms 

以下示例使用来自一个媒体发布者的两个名为 `socialco_impressions` 和 `socialco_users` 的表，该发布者希望使用差别隐私保护数据，同时与一个具有 `athletic_brand_sales` 数据的运动品牌协作。该媒体发布者已将 `user_id` 列配置为用户标识符列，同时在 AWS Clean Rooms中启用差别隐私。广告商不需要差异隐私保护，而是希望使用组合数据 CTEs 进行查询。由于他们的 CTE 使用受差别隐私保护的表，因此，广告商将这些受保护的表中的用户标识符列包含在 CTE 列的列表中，并根据用户标识符列联接这些受保护的表。

```
WITH matches_table AS(
     SELECT si.user_id, si.campaign_id, s.sale_id, s.sale_price
     FROM socialco_impressions si
     JOIN socialco_users su
         ON su.user_id = si.user_id
     JOIN athletic_brand_sales s
         ON s.emailsha256 = su.emailsha256
     WHERE s.timestamp > si.timestamp
    
UNION ALL
 
     SELECT si.user_id, si.campaign_id, s.sale_id, s.sale_price
     FROM socialco_impressions si
     JOIN socialco_users su
         ON su.user_id = si.user_id
     JOIN athletic_brand_sales s
         ON s.phonesha256 = su.phonesha256
     WHERE s.timestamp > si.timestamp
)
        
SELECT COUNT (DISTINCT user_id) as unique_users
FROM matches_table
GROUP BY campaign_id
ORDER BY COUNT (DISTINCT user_id) DESC
LIMIT 5
```

同样，如果要对受差别隐私保护的数据表运行窗口函数，您必须在 `PARTITION BY` 子句中包含用户标识符列。

```
ROW_NUMBER() OVER (PARTITION BY conversion_id, user_id ORDER BY match_type, match_age) AS row
```