【发布时间】:2020-09-15 06:36:38
【问题描述】:
我有两张桌子
CREATE TABLE item_color (
item_id INTEGER,
color VARCHAR(255)
);
CREATE TABLE item_info (
item_id INTEGER,
type INTEGER
);
INSERT INTO item_info (item_id, type)
VALUES
(57510, 7),
(57509, 7),
(57508, 8),
(57507, 8),
(57506, 7),
(57505, 7),
(57504, 8),
(57503, 8),
(57501, 8),
(57500, 8),
(57499, 7),
(57498, 7),
(57497, 8);
INSERT INTO item_color (item_id, color)
VALUES
(57510,'Red'), (57509,'Red'), (57508,'Green'), (57507,'Blue'), (57506,'Red'), (57505,'Red'),
(57504,'Red'), (57503,'Green'), (57501,'Blue'), (57500,'Red'), (57499,'Green'), (57498,'Blue'),
(57497,'Red'), (57510,'Red'), (57509,'Red'), (57508,'Red'), (57507,'Red'), (57506,'Red'),
(57505,'Red'), (57504,'Red'), (57503,'Red'), (57501,'Blue'), (57500,'Red'), (57499,'Red'),
(57498,'Red'), (57497,'Red'), (57510,'Green'), (57509,'Red'), (57508,'Red'), (57507,'Red'),
(57506,'Blue'), (57505,'Red'), (57504,'Green'), (57503,'Red'), (57501,'Blue'), (57500,'Red'),
(57499,'Red'), (57498,'Red'), (57497,'Red'), (57510,'Green'), (57509,'Green'), (57508,'Red'),
(57507,'Red'), (57506,'Blue'), (57505,'Red'), (57504,'Green'), (57503,'Green'), (57501,'Blue'),
(57500,'Blue'), (57499,'Blue'), (57498,'Blue'), (57497,'Blue'), (57510,'Red'), (57509,'Red'),
(57508,'Red'), (57507,'Red'), (57506,'Red'), (57505,'Red'), (57504,'Red'), (57503,'Red'),
(57501,'Red'), (57500,'Red'), (57499,'Red'), (57498,'Red'), (57497,'Red');
item_info
item_id type
57510 7
57509 7
57508 8
57507 8
57506 7
57505 7
57504 8
57503 8
57501 8
57500 8
57499 7
57498 7
57497 8
item_color
item_id color
57510 "Red"
57509 "Red"
57508 "Green"
57507 "Blue"
57506 "Red"
57505 "Red"
57504 "Red"
57503 "Green"
57501 "Blue"
57500 "Red"
57499 "Green"
57498 "Blue"
57497 "Red"
57510 "Red"
57509 "Red"
57508 "Red"
57507 "Red"
57506 "Red"
57505 "Red"
57504 "Red"
57503 "Red"
57501 "Blue"
57500 "Red"
57499 "Red"
57498 "Red"
57497 "Red"
57510 "Green"
57509 "Red"
57508 "Red"
57507 "Red"
57506 "Blue"
57505 "Red"
57504 "Green"
57503 "Red"
57501 "Blue"
57500 "Red"
57499 "Red"
57498 "Red"
57497 "Red"
57510 "Green"
57509 "Green"
57508 "Red"
57507 "Red"
57506 "Blue"
57505 "Red"
57504 "Green"
57503 "Green"
57501 "Blue"
57500 "Blue"
57499 "Blue"
57498 "Blue"
57497 "Blue"
57510 "Red"
57509 "Red"
57508 "Red"
57507 "Red"
57506 "Red"
57505 "Red"
57504 "Red"
57503 "Red"
57501 "Red"
57500 "Red"
57499 "Red"
57498 "Red"
57497 "Red"
我正在尝试查询以返回项目中绿色或蓝色类型的项目百分比。
期望的输出
type percent_blue_green total_items
7 30.00 6
8 34.29 7
我写了一个非常复杂的查询来得到这样的输出
SELECT subquery1.type,
ROUND( CAST((CAST(subquery3.blue_green_colors AS FLOAT) / CAST(subquery2.total_colors AS FLOAT) * 100) AS numeric), 2) AS percent_blue_green,
subquery1.total_items
FROM (SELECT type,
COUNT(item_id) AS total_items
FROM item_info
GROUP BY type) AS subquery1
JOIN (SELECT type,
COUNT(color) AS total_colors
FROM item_info AS si1
JOIN item_color AS sal1
ON sal1.item_id= si1.item_id
GROUP BY type) AS subquery2
ON subquery2.type= subquery1.type
JOIN (SELECT type,
COUNT(color) AS blue_green_colors
FROM item_info AS si2
JOIN item_color AS sal2
ON sal2.item_id= si2.item_id
WHERE color IN ('Blue', 'Green')
GROUP BY type) AS subquery3
ON subquery3.type= subquery1.type;
我还在学习 SQL。是否有一种更简单有效的方法来编写 SQL 查询来获得所需的输出。
【问题讨论】:
-
能否请您发布构建数据库的代码?
-
所以一个给定的项目可能有不止一种颜色?您应该提供有关计算规则的更多详细信息。
-
@bhristov 我添加了查询以创建表。
-
@GMB 每个项目 ID 都是唯一的,并且存在于两个表中,并且给定项目可以有多个颜色。我只想看看蓝色和绿色在 2 种类型 (7,8) 的总颜色中所占的百分比
标签: sql postgresql join count window-functions