简体   繁体   中英

PostgreSQL select query doesn't work

I have 3 tables:

CREATE table materials
 (id serial primary key not null,
 name varchar(50) not null,
 unit varchar(10) not null default 'шт',
 price decimal(12, 2) not null check (price>0));

CREATE table warehouses 
(id serial primary key not null,
 lastname varchar(25) not null);

CREATE table materials_in_warehouses
 (id_warehouses integer references warehouses(id) on update cascade on delete cascade,
 id_materials integer references materials(id),
 unit varchar(15) default 'шт',
 count integer not null CHECK (count>0),
 lastdate date not null, 
primary key (id_warehouses, id_materials);

And i need to select for each material : name; count of warehouses, where the material is present in an amount of > 100.

I tried to do something like this:

select materials.name, count(select * from materials_in_warehouses where 
materials.id = materials_in_warehouses.id_materials AND material_in_warehouses.count > 100) as sount from  materials;

But of course, this nonsense can't work.

Thank you in advance.

Pretty straight forward.

SELECT m.name, count(miw.id_warehouses)
FROM materials m
LEFT JOIN materials_in_warehouses miw ON m.id=miw.id_materials AND miw."count">100
GROUP BY m.id, m.name

Your mistake might have just been the fact that you're using count as a column name, when it's an aggregate function. Use double quotes in PostgreSql for that: Escaping keyword-like column names in Postgres

Try like this

select materials.name, count(
select id_warehouses from materials_in_warehouses join materials 
on  materials.id = materials_in_warehouses.id_materials
where material_in_warehouses.count > 100
) as sount from  materials;
SELECT m.name, COUNT(w.id) AS locs
  FROM materials m, warehouses w, materials_in_warehouses mw
  WHERE m.id = mw.id_materials
    AND w.id = mw.id_warehouses
    AND mw.count > 100
  GROUP BY m.name;

If that works I'll come back and explain how I came up with it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM