Как подсчитать, сколько раз определенные данные встречались в необработанном стандартном SQL BigQuery? - PullRequest
0 голосов
/ 29 августа 2018

скажи, у меня есть эта таблица,

| eta   | arrived  | time_diff |  
+-------+----------+-----------+
| 06:47 |    06:47 |    0      |
| 08:30 |    08:40 |    10     | 
| 10:30 |    10:40 |    10     |
| 10:30 |    10:31 |    1      | 
+-------+----------+-----------+
and i got the time_diff by TIME_DIFF(arrived , eta , MINUTE) as time_diff

я хотел бы посчитать, сколько у меня 0, 10 ... в идеале, приведенная выше таблица даст один 0, два 10 и один 1. Offcorse Я не знаю заранее, что результат time_diff просто хотел подсчитать, сколько раз результат получился, скажем, у меня может быть 2,3,5 ... Как мне сделать это в BigQuery Standard SQL?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ниже для BigQuery Standard SQL

С практической точки зрения, я бы рекомендовал группировать по ячейкам: 0-9, 10-19, 20-29 и т. Д., Как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '06:47' eta, '06:47' arrived  UNION ALL
  SELECT '08:30', '08:40' UNION ALL
  SELECT '10:30', '10:40' UNION ALL
  SELECT '10:30', '10:31'
)
SELECT FORMAT('%i - %i', bin, bin + 9) bin, cnt 
FROM (
  SELECT 
    10 * DIV(TIME_DIFF(PARSE_TIME('%R', arrived) , PARSE_TIME('%R', eta) , MINUTE), 10) bin,
    COUNT(1) cnt
  FROM `project.dataset.table`
  GROUP BY bin
)
ORDER BY bin   

с результатом

Row     bin         cnt  
1       0 - 9       2    
2       10 - 19     2      

в случае, если вам нужно точное распределение по time_diff как есть - вы можете использовать ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT '06:47' eta, '06:47' arrived  UNION ALL
  SELECT '08:30', '08:40' UNION ALL
  SELECT '10:30', '10:40' UNION ALL
  SELECT '10:30', '10:31'
)
SELECT 
  TIME_DIFF(PARSE_TIME('%R', arrived) , PARSE_TIME('%R', eta) , MINUTE) diff,
  COUNT(1) cnt
FROM `project.dataset.table`
GROUP BY diff
ORDER BY diff  

с результатом как

Row     diff        cnt  
1       0           1    
2       1           1    
3       10          2    
0 голосов
/ 29 августа 2018

Вы должны использовать группу по пункту

Select time_diff , Count(*)
From [table]
Group by time_diff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...