# Как посчитать количество элементов в массиве в PostgreSQL: cardinality и array_length

> Разбираем способы подсчета элементов в массиве PostgreSQL. Сравнение функций cardinality() и array_length(), работа с многомерными массивами и обработка NULL.

- **URL:** https://eagle2000.space/til/postgresql/array-len/
- **Date:** 2025-02-14

- **Tags:** PostgreSQL

---
### Вступление

Работа с массивами в PostgreSQL — это мощный инструмент, который позволяет хранить и обрабатывать наборы данных прямо в базе. Но как правильно посчитать количество элементов в массиве? Разберём два основных способа, которые помогут вам справиться с этой задачей.

---

#### 1️⃣ **Функция `array_length`**

Функция `array_length` позволяет узнать длину массива по определённой размерности. Это особенно полезно, если вы работаете с многомерными массивами.

**Пример использования:**
```sql
select array_length(array[1, 2, 3], 1);
```
**Результат:**  
`3`

Здесь мы передаём массив `[1, 2, 3]` и указываем размерность `1` (поскольку массив одномерный). Функция возвращает количество элементов в массиве.

**Для многомерных массивов:**
```sql
select array_length(array[[1, 2], [3, 4]], 2);
```
**Результат:**  
`2`

В этом примере мы работаем с двумерным массивом. Указываем размерность `2`, чтобы узнать количество элементов во втором измерении (количество столбцов).

---

#### 2️⃣ **Функция `cardinality`**

Если вам нужно посчитать общее количество элементов в массиве, независимо от его размерности, используйте функцию `cardinality`. Она подходит как для одномерных, так и для многомерных массивов.

**Пример использования:**
```sql
select cardinality(array[1, 2, 3]);
```
**Результат:**  
`3`

Здесь функция возвращает общее количество элементов в массиве.

**Для многомерных массивов:**
```sql
select cardinality(array[[1, 2], [3, 4]]);
```
**Результат:**  
`4`

В этом случае `cardinality` считает все элементы массива, независимо от их вложенности.

---

### Какой метод выбрать? 🤔

- **`array_length`** — используйте, если вам нужно узнать длину массива по определённой размерности. Это особенно полезно для многомерных массивов.
- **`cardinality`** — подходит, если вам нужно общее количество элементов в массиве, независимо от его структуры.

---

### Полезные ссылки 🔗

- 📚 Официальная документация PostgreSQL по работе с массивами: [https://www.postgresql.org/docs/current/functions-array.html](https://www.postgresql.org/docs/current/functions-array.html)
- 🧩 Практика без установки PostgreSQL: [https://pgplayground.com/](https://pgplayground.com/)
