Google bigquery 如何使用BigQuery模拟数据透视表?

Google bigquery 如何使用BigQuery模拟数据透视表?,google-bigquery,Google Bigquery,我需要将查询结果按列组织,就像它是一个透视表一样。我怎样才能做到这一点呢?2020更新:fhofa.x.pivot() 使用条件语句将查询结果组织成行和列。在下面的示例中,搜索以值“Google”开头的大多数修订版Wikipedia文章的结果被组织到列中,如果它们符合各种标准,则在列中显示修订计数 SELECT page_title, /* Populate these columns as True or False, depending on the condition */

我需要将查询结果按列组织,就像它是一个透视表一样。我怎样才能做到这一点呢?

2020更新:
fhofa.x.pivot()


使用条件语句将查询结果组织成行和列。在下面的示例中,搜索以值“Google”开头的大多数修订版Wikipedia文章的结果被组织到列中,如果它们符合各种标准,则在列中显示修订计数

SELECT
  page_title,
  /* Populate these columns as True or False, depending on the condition */
  IF(page_title CONTAINS 'search', INTEGER(total), 0) AS search,
  IF(page_title CONTAINS 'Earth' OR page_title CONTAINS 'Maps', INTEGER(total), 0) AS geo,
FROM
  /* Subselect to return top revised Wikipedia articles containing 'Google'
   * followed by additional text.
   */
  (SELECT
    TOP(title, 5) as page_title,
    COUNT(*) as total
   FROM
     [publicdata:samples.wikipedia]
   WHERE
     REGEXP_MATCH (title, r'^Google.+') AND wp_namespace = 0
  );
结果:

+---------------+--------+------+
|  page_title   | search | geo  |
+---------------+--------+------+
| Google search |   4261 |    0 |
| Google Earth  |      0 | 3874 |
| Google Chrome |      0 |    0 |
| Google Maps   |      0 | 2617 |
| Google bomb   |      0 |    0 |
+---------------+--------+------+
类似的示例,不使用子查询:

SELECT SensorType, DATE(DTimestamp), AVG(data) avg, 
FROM [data-sensing-lab:io_sensor_data.moscone_io13]
WHERE DATE(DTimestamp) IN ('2013-05-16', '2013-05-17')
GROUP BY 1, 2
ORDER BY 2, 3 DESC;
生成一个3列表格:传感器类型、日期和平均数据。要“透视”并将日期作为列,请执行以下操作:

SELECT
  SensorType,
  AVG(IF(DATE(DTimestamp) = '2013-05-16', data, null)) d16,
  AVG(IF(DATE(DTimestamp) = '2013-05-17', data, null)) d17
FROM [data-sensing-lab:io_sensor_data.moscone_io13]
GROUP BY 1
ORDER BY 2 DESC;

相同的方法/结果,但使用BigQuery标准SQL:

-- top revised Wikipedia articles containing 'Google'
WITH articles AS (
  SELECT title AS page_title,
         COUNT(*) AS total
    FROM `publicdata.samples.wikipedia`
   WHERE REGEXP_CONTAINS(title, r'^Google.+') AND wp_namespace = 0
   GROUP BY title
   ORDER BY total DESC
   LIMIT 5
)

SELECT page_title,
       -- Populate these columns as True or False, depending on the condition
       IF(page_title LIKE '%search%', total, 0) AS search,
       IF(page_title LIKE '%Earth%' OR page_title LIKE '%Maps%', total, 0) AS geo
  FROM articles
;

一开始使用
AVG(IF(…)
MAX(IF(…)
(对于字符串)来“聚合单个值”看起来很奇怪。。。但它是有效的,谢谢@首先使用Ripounet(如果(..)可能会更好,或者使用GROUP_CONCAT(如果(..)来保留它们。很好,
首先使用
符合我对数字和字符串的需求。