Select count php postgresql

Select count php postgresql

Агрегатные функции вычисляют одно значение над некоторым набором строк. В PostgreSQL имеются следующие агрегатные функции:

  • AVG : находит среднее значение. Входной параметр должен представлять один из следующих типов: smallint, int, bigint, real, double precision, numeric, interval . Для целочисленнных параметров результатом будет значение типа numeric , для параметров, которые представляют число с плавающей точкой, — значение типа double precision .
  • BIT_AND : выполняет операцию побитового умножения (операции логического И) для чисел следующих типов: smallint, int, bigint, bit . Если параметр содержит значение NULL, то возвращается NULL.
  • BIT_OR : выполняет операцию побитового сложения (операции логического ИЛИ) для чисел следующих типов: smallint, int, bigint, bit . Если параметр содержит значение NULL, то возвращается NULL.
  • BOOL_AND : выполняет операцию логического умножения для значений типа bool . Если входные все значения равны true, то возвращается true, иначе возвращается false.
  • BOOL_OR : выполняет операцию логического сложения для значений типа bool . Если входные хотя бы одно из значений равно true, то возвращается true, иначе возвращается false.
  • COUNT(*) : находит количество строк в запросе
  • COUNT(expression) : находит количество строк в запросе, для которых expression не содержит значение NULL.
  • SUM : находит сумму значений
  • MIN : находит наименьшее значение
  • MAX : находит наибольшее значение
  • STRING_AGG(expression, delimiter) : соединяет с помощью delimiter все текстовые значения из expression в одну строку.

В качестве параметра все агрегатные функции принимают выражение, которое представляет критерий для определения значений. Зачастую, в качестве выражения выступает название столбца, над значениями которого надо проводить вычисления.

Если в наборе нет строк, то все агрегатные функции за исключением COUNT(*) возвращают значение NULL.

Avg

Функция Avg возвращает среднее значение на диапазоне значений столбца таблицы.

Пусть в базе данных у нас есть таблица товаров Products, которая описывается следующими выражениями:

CREATE TABLE Products ( Id SERIAL PRIMARY KEY, ProductName VARCHAR(30) NOT NULL, Company VARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price NUMERIC NOT NULL, IsDiscounted BOOL ); INSERT INTO Products (ProductName, Company, ProductCount, Price, IsDiscounted) VALUES ('iPhone X', 'Apple', 3, 76000, false), ('iPhone 8', 'Apple', 2, 71000, true), ('iPhone 7', 'Apple', 5, 42000, true), ('Galaxy S9', 'Samsung', 2, 46000, false), ('Galaxy S8 Plus', 'Samsung', 1, 56000, true), ('Desire 12', 'HTC', 5, 28000, true), ('Nokia 9', 'HMD Global', 6, 38000, true);

Найдем среднюю цену товаров из базы данных:

SELECT AVG(Price) AS Average_Price FROM Products;

Для поиска среднего значения в качестве выражения в функцию передается столбец Price. Для получаемого значения устанавливается псевдоним Average_Price, хотя можно его и не устанавливать.

Читайте также:  File attributes with java

Функция avg в PostgreSQL

Также мы можем применить фильтрацию. Например, найти среднюю цену для товаров какого-то определенного производителя:

SELECT AVG(Price) FROM Products WHERE Company='Apple';

И, кроме того, мы можем находить среднее значение для более сложных выражений. Например, найдем среднюю сумму всех товаров, учитывая их количество:

SELECT AVG(Price * ProductCount) FROM Products

Count

Функция Count вычисляет количество строк в выборке. Есть две формы этой функции. Первая форма COUNT(*) подсчитывает число строк в выборке:

SELECT COUNT(*) FROM Products;

Функция count в PostgreSQL

Вторая форма функции вычисляет количество строк по определенному столбцу, при этом строки со значениями NULL игнорируются:

SELECT COUNT(DISTINCT Company) FROM Products;

Оператор DISTINCT указывает, что надо взять именно уникальные значения из столбца Company.

Min и Max

Функции Min и Max возвращают соответственно минимальное и максимальное значение по столбцу. Например, найдем минимальную цену среди товаров:

SELECT MIN(Price) FROM Products;
SELECT MAX(Price) FROM Products;

Данные функции также игнорируют значения NULL и не учитывают их при подсчете.

Sum

Функция Sum вычисляет сумму значений столбца. Например, подсчитаем общее количество товаров:

SELECT SUM(ProductCount) FROM Products;

Также вместо имени столбца может передаваться вычисляемое выражение. Например, найдем общую стоимость всех имеющихся товаров:

SELECT SUM(ProductCount * Price) FROM Products;

BOOL_AND и BOOL_OR

Допустим, нам надо узнать, есть ли в таблице товары, которые подлежать скидке, то есть у которых IsDiscounted = true. В этом случае можно выполнить функцию BOOL_OR , которая возвращает true, если хотя бы одно значение в наборе равно true:

SELECT BOOL_OR(IsDiscounted) FROM Products;

Если нам надо узнать, все ли товары подлежат скидке, то можно применить функцию BOOL_AND , которая возвращает true, если все значения в наборе равны true:

SELECT BOOL_AND(IsDiscounted) FROM Products;

STRING_AGG

Функция STRING_AGG() объединяет набор строковых значений или значений bytea. Например, выберем названия всех товаров:

SELECT STRING_AGG(ProductName, ', ') FROM Products;

Функция string_agg в PostgreSQL

Или выберем всех производителей:

SELECT STRING_AGG(DISTINCT Company, ', ') FROM Products; -- результат операции -- Apple, HMD Global, HTC, Samsung

Чтобы выбрать уникальных производителей, здесь также применяется оператор DISTINCT , иначе у нас бы повторялись значения.

Комбинирование функций

Объединим применение нескольких функций:

SELECT COUNT(*) AS ProdCount, SUM(ProductCount) AS TotalCount, MIN(Price) AS MinPrice, MAX(Price) AS MaxPrice, AVG(Price) AS AvgPrice FROM Products;

Источник

pg_query

pg_query() выполняет query к указанной в connection базе данных. pg_query_params() должна быть предпочтительнее в большинстве случаев.

В случае возникновения ошибки функция возвращает false , детали ошибки можно получить с помощью функции pg_last_error() , если соединение с БД не нарушено.

Замечание: Несмотря на то, что параметр connection может быть опущен, делать так не рекомендуется, так как это может привести к трудно находимым ошибкам в скриптах.

Замечание:

Ранее данная функция называлась pg_exec() . pg_exec() всё ещё доступна в целях обеспечения совместимости, но лучше использовать новое имя.

Список параметров

Экземпляр PgSql\Connection . Если connection не указано, используется соединение по умолчанию. Соединение по умолчанию — это последнее соединение, выполненное с помощью функций pg_connect() или pg_pconnect() .

Читайте также:  Рамка вокруг таблицы

Начиная с версии PHP 8.1.0, использование соединения по умолчанию устарело.

Выражение или выражения SQL для выполнения. Если передано несколько выражений они автоматически выполняются, как одна транзакция если явно не указаны команды BEGIN/COMMIT внутри выражения. Тем не менее, использовать несколько транзакций в одном вызове функции не рекомендуется.

Строковое представление пользовательских данных очень опасно и часто приводит к возможности SQL инъекции. В большинстве случаев лучше передавать пользовательские данные параметром в pg_query_params() , а не подставлять их в строку запроса.

Любые данные передаваемые от пользователя непосредственно в строку запроса должны быть хорошо экранированы.

Возвращаемые значения

Экземпляр PgSql\Result в случае успешного выполнения или false в случае возникновения ошибки.

Список изменений

Версия Описание
8.1.0 Возвращает экземпляр PgSql\Result ; ранее возвращался ресурс (resource).
8.1.0 Параметр connection теперь ожидает экземпляр PgSql\Connection ; ранее ожидался ресурс (resource).

Примеры

Пример #1 Пример использования pg_query()

$conn = pg_pconnect ( «dbname=publisher» );
if (! $conn ) echo «Произошла ошибка.\n» ;
exit;
>

$result = pg_query ( $conn , «SELECT author, email FROM authors» );
if (! $result ) echo «Произошла ошибка.\n» ;
exit;
>

while ( $row = pg_fetch_row ( $result )) echo «Автор: $row [ 0 ] E-mail: $row [ 1 ] » ;
echo «
\n» ;
>

Пример #2 Использование нескольких выражений в pg_query()

$conn = pg_pconnect ( «dbname=publisher» );

// эти выражения будут исполнены в одной транзакции

$query = «UPDATE authors SET author=UPPER(author) WHERE > ;
$query .= «UPDATE authors SET author=LOWER(author) WHERE > ;
$query .= «UPDATE authors SET author=NULL WHERE > ;

Смотрите также

  • pg_connect() — Открывает соединение с базой данных PostgreSQL
  • pg_pconnect() — Открывает постоянное соединение с сервером PostgreSQL
  • pg_fetch_array() — Возвращает строку результата в виде массива
  • pg_fetch_object() — Выбирает строку результата запроса и возвращает данные в виде объекта
  • pg_num_rows() — Возвращает количество строк в выборке
  • pg_affected_rows() — Возвращает количество затронутых запросом записей (кортежей)

Источник

PostgreSQL COUNT Function

Summary: in this tutorial, you will learn how to use the PostgreSQL COUNT() function to count the number of rows in a table.

PostgreSQL COUNT() function overview

The COUNT() function is an aggregate function that allows you to get the number of rows that match a specific condition of a query.

The following statement illustrates various ways of using the COUNT() function.

COUNT(*)

The COUNT(*) function returns the number of rows returned by a SELECT statement, including NULL and duplicates.

SELECT COUNT(*) FROM table_name WHERE condition;Code language: SQL (Structured Query Language) (sql)

When you apply the COUNT(*) function to the entire table, PostgreSQL has to scan the whole table sequentially.

Читайте также:  Распознавание лица python github

If you use the COUNT(*) function on a big table, the query will be slow. This is related to the PostgreSQL MVCC implementation. Because multiple transactions see different states of data at the same time, there is no direct way for COUNT(*) function to count across the whole table, therefore PostgreSQL must scan all rows.

COUNT(column)

Similar to the COUNT(*) function, the COUNT(column) function returns the number of rows returned by a SELECT clause. However, it does not consider NULL values in the column .

SELECT COUNT(column) FROM table_name WHERE condition;Code language: SQL (Structured Query Language) (sql)

COUNT(DISTINCT column)

In this form, the COUNT(DISTINCT column) returns the number of unique non-null values in the column.

SELECT COUNT(DISTINCT column) FROM table_name WHERE condition;Code language: SQL (Structured Query Language) (sql)

We often use the COUNT() function with the GROUP BY clause to return the number of items for each group. For example, we can use the COUNT() with the GROUP BY clause to return the number of films in each film category.

PostgreSQL COUNT() function examples

Let’s use the payment table in the sample database for the demonstration.

1) PostgreSQL COUNT(*) example

The following statement uses the COUNT(*) function to return the number of transactions in the payment table:

SELECT COUNT(*) FROM payment;Code language: SQL (Structured Query Language) (sql)

2) PostgreSQL COUNT(DISTINCT column) example

To get the distinct amounts which customers paid, you use the COUNT(DISTINCT amount) function as shown in the following example:

SELECT COUNT (DISTINCT amount) FROM payment;Code language: SQL (Structured Query Language) (sql)

PostgreSQL COUNT() with GROUP BY clause

To get the number of payments by the customer, you use the GROUP BY clause to group the payments into groups based on customer id, and use the COUNT() function to count the payments for each group.

The following query illustrates the idea:

SELECT customer_id, COUNT (customer_id) FROM payment GROUP BY customer_id;Code language: SQL (Structured Query Language) (sql)

Here is the partial output:

postgresql count with group by

PostgreSQL COUNT() with HAVING clause

You can use the COUNT function in a HAVING clause to apply a specific condition to groups. For example, the following statement finds customers who have made more than 40 payments:

SELECT customer_id, COUNT (customer_id) FROM payment GROUP BY customer_id HAVING COUNT (customer_id) > 40;Code language: SQL (Structured Query Language) (sql)

postgresql count with having

In this tutorial, you have learned how to use the PostgreSQL COUNT() function to return the number of rows in a table.

Источник

Оцените статью