Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何透视表并通过值进行计数?_Sql_Amazon Athena - Fatal编程技术网

Sql 如何透视表并通过值进行计数?

Sql 如何透视表并通过值进行计数?,sql,amazon-athena,Sql,Amazon Athena,我在一个名为measurements的表中有两列:mac_address和space。 每行显示一个mac_地址和检测到它的位置 它可以有重复 我想做的是查看空间之间共享了多少mac_地址。 我尝试这样做: Space 1 | Space 2 | mac_adress 第1列和第2列包含所有可能的空格组合。mac_地址列包含这两个空间之间所有唯一共享mac地址的总和。 这个问题困扰了我一段时间。我尝试使用分组和案例实现一个解决方案,但结果与我想要的不一样 谢谢:) 注意:我正在使用AWS的At

我在一个名为measurements的表中有两列:mac_address和space。 每行显示一个mac_地址和检测到它的位置

它可以有重复

我想做的是查看空间之间共享了多少mac_地址。 我尝试这样做:

Space 1 | Space 2 | mac_adress
第1列和第2列包含所有可能的空格组合。mac_地址列包含这两个空间之间所有唯一共享mac地址的总和。 这个问题困扰了我一段时间。我尝试使用
分组和案例
实现一个解决方案,但结果与我想要的不一样

谢谢:)


注意:我正在使用AWS的Athena,因此我无法使用Pivot等模块来获得您要查找的结果。需要使用
mac\u地址将
测量值
表自身连接起来,我们需要对空间进行排序,以便只返回两个空间组合的一个版本

WITH measurements AS (
SELECT 'room1' AS space, 'a1' AS mac_address
UNION
SELECT 'room1' AS space, 'a2' AS mac_address
UNION
SELECT 'room2' AS space, 'a1' AS mac_address
UNION
SELECT 'room3' AS space, 'a1' AS mac_address
UNION
SELECT 'room3' AS space, 'a2' AS mac_address
)

SELECT
  LEAST(m1.space, m2.space) AS space_1,
  GREATEST(m1.space, m2.space) AS space_2,
  COUNT(DISTINCT m1.mac_address) AS mac_addresses
FROM measurements AS m1
  JOIN measurements AS m2 ON m1.mac_address = m2.mac_address
WHERE
  m1.space != m2.space
GROUP BY 1,2;
measurements
CTE创建的虚拟数据与您描述表格的方式类似:

| space | mac_address |
|-------|-------------|
| room1 | a1          |
| room1 | a2          |
| room2 | a1          |
| room3 | a1          |
| room3 | a2          |
从这些数据中,我们可以看到room1/room2
空间
组合只有一个唯一的
mac\U地址
a1
),room1/room3有两个唯一的组合(
a1
a2
),room2/room3有一个唯一的组合(
a1


因为我们加入了
测量本身,所以我们使用
最大
最小
来确保我们只计算
room1/room2
,而不计算
room2/room1

按“空间”算你是指房间吗?还是一个地点?或者一个城市/一个地址?一个像商店这样的房间(例如:)