Дана такая таблица, как:
| 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 |
Есть ли способ подсчитать уникальные значения, как во втором примере, который я привел?
Ниже приведен стандартный 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 Смотрите этот вопрос для хорошего объяснения: stackoverflow.com/questions/181272/…
@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, когда их производительность была совершенно другой, что не так в наши дни.
Я не понимаю ваших желаемых результатов. Почему
id
отсутствует в некоторых строках?