PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chức năng tổng hợp tùy chỉnh

Bạn đang hiển thị một phép tính trung bình, nhưng muốn giá trị văn bản đầu tiên bạn thấy?

Dưới đây là cách để làm điều đó. Giả sử bạn muốn giá trị khác không đầu tiên, nghĩa là. Nếu không, bạn sẽ cần theo dõi xem bạn đã có giá trị hay chưa.

Hàm tích lũy được viết dưới dạng plpgsql và sql - hàm plpgsql cho phép bạn sử dụng tên biến và gỡ lỗi nó. Nó chỉ đơn giản sử dụng COALESCE so với giá trị tích lũy trước đó và giá trị mới và trả về giá trị khác không đầu tiên. Vì vậy - ngay sau khi bạn có giá trị không null trong bộ tích lũy, mọi thứ khác sẽ bị bỏ qua.

Bạn cũng có thể muốn xem xét hàm cửa sổ "first_value" cho loại điều này nếu bạn đang sử dụng phiên bản PostgreSQL (8.4+) hiện đại.

http://www.postgresql.org/docs/9.1/static /functions-window.html

HTH

BEGIN;

CREATE FUNCTION remember_first(acc text, newval text) RETURNS text AS $$
BEGIN
    RAISE NOTICE '% vs % = %', acc, newval, COALESCE(acc, newval);
    RETURN COALESCE(acc, newval);
END;
$$ LANGUAGE plpgsql IMMUTABLE;

CREATE FUNCTION remember_first_sql(text,text) RETURNS text AS $$
    SELECT COALESCE($1, $2);
$$ LANGUAGE SQL IMMUTABLE;

-- No "initcond" means we start out with null
--      
CREATE AGGREGATE first(text) (
    sfunc = remember_first,
    stype = text
);

CREATE TEMP TABLE tt (t text);
INSERT INTO tt VALUES ('abc'),('def'),('ghi');

SELECT first(t) FROM tt;

ROLLBACK;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Áp dụng một quy trình kích hoạt duy nhất cho nhiều bảng khác nhau

  2. Postregsql Ngày Chênh lệch trên cơ sở tính theo giây

  3. Chia tỷ lệ PostgreSQL sử dụng Bộ làm mát kết nối &Bộ cân bằng tải

  4. PostgreSQL 12:Khóa ngoại và bảng phân vùng

  5. Làm thế nào để sử dụng ALIAS trong mệnh đề PostgreSQL ORDER BY?