postgresql - Postgresql 在查询中获取限制的记录总数

标签 postgresql postgresql-9.4

我已经创建了一个表并尝试从表记录创建一个 json 数组,它将在其中返回 JSON 数组作为 {"total_record":2222,data[{row 1 data},{row 2 data}] }

this is my table design

下面是相同的查询

SELECT row_to_json(selected_records)::text AS data
FROM  (   
   SELECT min(total_count) AS total_count
        , array_to_json(array_agg(row_to_json(ROW(name,id,gender)))) AS data
   FROM (
      SELECT *
           , count(*) over () AS total_count  -- shouldn't show up in result
      FROM   test

      GROUP  BY ID
      LIMIT  1
      ) records
   ) selected_records;

但有些我是如何得到这样的 json 的

{"total_count":277938,"data":[{"f1":"Carol Rau","f2":1,"f3":"M"}]}

我需要列字段名而不是 f1,f2,f3

{"total_count":277938,"data":[{"name":"Carol Rau","id":1,"gender":"M"}]}

相同的 DDL:

create table public.test (name varchar, email varchar, phone bigint, address varchar, gender varchar, id serial primary key) 
INSERT INTO "public"."test" ("name", "email", "phone", "address", "gender", "id") VALUES ('Carol Rau', 'Computers, Electronics & Games', '1000000000', 'Suite 843 489 Annabell Islands, North Katlynland, UT 90089-0425', 'M', '1');
INSERT INTO "public"."test" ("name", "email", "phone", "address", "gender", "id") VALUES ('Vicente Sipes', 'Games', '1000000000', 'Suite 870 21754 Dare Ville, Thielstad, WA 97243-0588', 'M', '2');
INSERT INTO "public"."test" ("name", "email", "phone", "address", "gender", "id") VALUES ('Jadyn Kris', 'Kids', '1000000000', '5136 Harmon Dale, Jeramiemouth, VT 17688', 'M', '21');
INSERT INTO "public"."test" ("name", "email", "phone", "address", "gender", "id") VALUES ('Melyna Lueilwitz', 'Automotive, Music & Outdoors', '1000000000', 'Suite 578 0765 Paucek Meadow, Torphyborough, AR 41921', 'M', '22');
INSERT INTO "public"."test" ("name", "email", "phone", "address", "gender", "id") VALUES ('Phoebe Herzog Sr.', 'Movies', '1000000000', '82869 Carrie Ridges, East Tavaresmouth, AR 62150', 'M', '23');
INSERT INTO "public"."test" ("name", "email", "phone", "address", "gender", "id") VALUES ('Cierra Luettgen', 'Toys', '1000000000', '326 Maida Pine, Aylamouth, IL 03742', 'M', '90');

最佳答案

已编辑

select row_to_json(t) from (
  select
    (select count(*) from public.test) as total_count,
    (select json_agg(row_to_json(tt))
       from (select name, id, gender from public.test limit 1) tt) as data
) t

关于postgresql - Postgresql 在查询中获取限制的记录总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48803618/

相关文章:

ruby-on-rails - 如何查询包含数组的jsonb字段

postgresql - Postgresql 9.4 中带有空格的错误排序/整理/顺序

sql - 如何优化此全文搜索查询? (tsvector)(150 万行)

SQL left join with clause where on right table

postgresql - 从复合类型创建表时如何设置默认值?

sql - 将标签数组传递给 plpgsql 函数并在 WHERE 条件下使用它

postgresql - 对行总和的约束

sql - 在无关列上的 Postgresql 错误中选择 Distinct

exception - PostgreSQL 自定义异常?

python - 使用 Python 错误填充 PostgreSQL 数据库