我正在做一些家庭作业问题,有点困惑如何使用计数和最大在我的查询。我想知道是否有人能向我解释其中的“where”部分,或者我只是把代码写得完全错了:
目录关系列出了供应商对零件收取的价格。catalog.pid是parts.pid的外键。catalog.sid是suppliers.sid的外键。用sql编写以下查询。执行它们以确保你得到正确的答案。复制sql查询并将结果的屏幕截图作为答案。不要列出返回结果中未指定的其他属性。
目录包含:pid、sid、cost
零件包括:pid、pname、color
供应商名称:sid、sname、地址
c(2分)返回唯一零件的编号。
select count (distinct *) from Parts;
--这会在select上产生编译错误,有人对此有建议吗?
一(1分)在所有供应商中找出该零件的pids、pnames和最大成本。
select p.pid, p.pname, c.cost from Parts p
inner join Catalog c on c.sid = p.pid
inner join Suppliers s on c.pid = s.sid
where max(c.cost);
我不完全确定我是否正确地开始这一点,我不知道什么时候考虑做'哪里'的一部分。。总是需要吗?
2条答案
按热度按时间bd1hkmkf1#
对于不同的零件id,零件由id标识
或者,如果pid是自动递增的,则可以将行
在where条件下不应使用聚合函数..例如:
where max(c.cost)
在执行aggreagtion函数之前首先计算中的where条件,因此如果要对应该使用的聚合结果进行筛选,则where子句不能知道max()的值如
having c.cost = max(c.cost)
但是在这种情况下,对于select中的非聚合列,如果没有groupby,就不能使用聚合函数并获取另一种类型的错误。但如果还需要其他列,可以使用子查询
b1zrtrql2#
在上述情况下,distinct是不必要的,因为pid很可能是部件的主键。所以,上述结果应该和
第二个查询不需要与供应商连接,因为它跨所有供应商。