Как подсчитать уникальные вхождения столбца в Big Query

Дана такая таблица, как:

| ID | Value  |
|-------------|
| 1  | "some" |
| 1  | "some" |
| 1  | "value"|
| 2  | "some" |
| 3  | "some" |
| 3  | "value |
| 3  | "value |

Как я могу подсчитать количество уникальных вхождений значения для каждого идентификатора?

Таким образом, вы получите таблицу, например:

| ID | Value  | number |
|-------------|--------|
| 1  | "some" |   2    |
|    | "value"|   1    |
| 2  | "some" |   1    |
| 3  | "some" |   1    |
|    | "value |   2    | 

Я попытался использовать OVER(PARTITION BY ID order by Value) для разделения таблицы по идентификаторам и подсчета отдельных значений. Однако это подсчитывает количество уникальных вхождений, а затем складывает их вместе. Итак, я получаю такую ​​​​таблицу:

| ID | Value  | number |
|-------------|--------|
| 1  | "some" |   2    |
| 1  | "some" |   2    |
| 1  | "value"|   3    |
| 2  | "some" |   1    |
| 3  | "some" |   1    |
| 3  | "value |   3    |
| 3  | "value |   3    |

Есть ли способ подсчитать уникальные значения, как во втором примере, который я привел?

Я не понимаю ваших желаемых результатов. Почему id отсутствует в некоторых строках?

Gordon Linoff 28.05.2019 23:41
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
2 804
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ниже приведен стандартный SQL BigQuery.

#standardSQL
SELECT id, value, COUNT(1) number
FROM `project.dataset.table`
GROUP BY id, value

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

Row id  value   number   
1   1   some    2    
2   1   value   1    
3   2   some    1    
4   3   value   2    
5   3   some    1    

Оно работает! Можете ли вы объяснить, как COUNT(1) это делает? Предполагая, что «1» является индексом столбца?

JoeBoggs 29.05.2019 09:11

@JoeBoggs Смотрите этот вопрос для хорошего объяснения: stackoverflow.com/questions/181272/…

Ben P 29.05.2019 10:16

@JoeBoggs - COUNT(1) здесь эквивалентно COUNT(*) и просто подсчитывает количество строк в группе без учета фактических значений каких-либо столбцов. Если бы вы использовали COUNT(col), это учитывало бы ТОЛЬКО строки, где col не равно NULL! Вы можете протестировать выполнение следующего запроса — SELECT COUNT(1), COUNT(*), COUNT(col) FROM (SELECT 1 col UNION ALL SELECT NULL) — примечание — это запрос для #standardSQL. Причина, по которой я обычно использую COUNT(1) vs COUNT(*), просто историческая, так как я пришел из каменного века db, когда их производительность была совершенно другой, что не так в наши дни.

Mikhail Berlyant 29.05.2019 19:53

Другие вопросы по теме