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

Tạo mảng trong SELECT

Điều này sẽ thực hiện thủ thuật:

SELECT a
     , sum(ab_ct)::int AS ct_total
     , count(*)::int   AS ct_distinct_b
     , array_agg(b || ', ' || ab_ct::text) AS b_arr
FROM  (
    SELECT a, b, count(*) AS ab_ct
    FROM   tbl
    GROUP  BY a, b
    ORDER  BY a, ab_ct DESC, b  -- append "b" to break ties in the count
    ) t
GROUP  BY a
ORDER  BY ct_total DESC;

Lợi nhuận:

  • ct_total :tổng số b per a .
  • ct_distinct_b :số lượng b riêng biệt per a .
  • b_arr :mảng b cộng với tần suất của b , được sắp xếp theo tần suất b .

Được sắp xếp theo tổng số b per a .

Ngoài ra, bạn có thể sử dụng ORDER BY mệnh đề trong lệnh gọi tổng hợp trong PostgreSQL 9.0 trở lên. Như:

SELECT a
     , sum(ab_ct)::int AS ct_total
     , count(*)::int   AS ct_distinct_b
     , array_agg(b || ', ' || ab_ct::text ORDER BY a, ab_ct DESC, b) AS b_arr
FROM  (
    SELECT a, b, count(*) AS ab_ct
    FROM   tbl
    GROUP  BY a, b
    ) t
GROUP  BY a
ORDER  BY ct_total DESC;

Có thể rõ ràng hơn. Nhưng nó thường chậm hơn. Và việc sắp xếp các hàng trong một truy vấn con hoạt động đối với các truy vấn đơn giản như thế này. Giải thích thêm:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực thi trình kích hoạt hoãn lại chỉ một lần trên mỗi hàng trong PostgreSQL

  2. Điều chỉnh PostgreSQL:Những điều quan trọng để thúc đẩy hiệu suất

  3. Cài đặt PL / Java 1.5.2 trong PostgreSQL 11

  4. Knex.js buộc sử dụng lại phiên cho 4 truy vấn sau

  5. postgresql:khoảng thời gian chia nhỏ tại sự kiện