我需要编写一个涉及两个表的复杂查询,我正在努力理解如何正确构造查询。
表结构如下所示,还有示例数据:
Table 1:
ID | Type | Size
A123 | Block | Medium
C368 | Square | Large
X634 | Triangle | Small
K623 | Square | Small
Table 2:
ID | Code | Description | Price
A123 | C06 | Sensitive Material | 99.99
A123 | H66 | Heavy Grade | 12.76
A123 | U74 | Pink Hue | 299.99
C368 | H66 | Heavy Grade | 12.76
C368 | G66 | Green Hue | 499.99
C368 | C06 | Sensitive Material | 99.99
C368 | K79 | Clear Glass | 59.99
X634 | G66 | Green Hue | 499.99
X634 | K79 | Clear Glass | 59.99
X634 | Z63 | Enterprise Class | 999.99
K623 | K79 | Clear Glass | 59.99
K623 | G66 | Green Hue | 499.99
K623 | X57 | Extra Piping | 199.99
查询应该主要基于表1中的类型列,然后基于匹配的ID对表2中的计数进行合计。
对于Type=square,最终输出应该是如下所示的计数:
Code | Description | Count
H66 | Heavy Grade | 1
G66 | Green Hue | 2
C06 | Sensitive Material | 1
K79 | Clear Glass | 2
X57 | Extra Piping | 1
我如何使用这两个表来组装这个结果? 这是我编写的一个初始查询--看起来正确吗? 它产生一个类似于上面例子的结果,但是我不确定它是100%正确的并且捕获了所有的边缘情况。
select code, description, count(*) as total
from
(
SELECT code, description
FROM db.options_list ops
INNER JOIN db.obj_list ON ops.ID = db.obj_list.ID
WHERE db.obj_list.type="Square"
) src
group by code
order by total desc
谢谢
如果我理解正确,这只是一个简单的join
/group by
查询:
SELECT ops.code, ops.description, count(*) as total
FROM db.options_list ops JOIN
db.obj_list ol
ON ops.ID = ol.ID
WHERE ol.type = 'Square'
GROUP BY ops.code, ops.description
ORDER BY total desc;
注意事项:
选择
中的所有未聚合列都在组BY
中。您的查询可能在某些数据库中工作。 不过,我确实鼓励您在编写查询时遵循最佳实践。
您似乎需要连接和聚合:
select op.type, ob.code, ob.description, count(*) cnt
from options_list op
inner join obj_list ob on op.id = ob.id
group by ol.type, ob.code, ob.description