我一直致力于SQL工作以实现以下目标。我能够使用“AND”为以下内容编写查询,但我能够在查询中使用“至少”。
查找供应红色部分和绿色部分的供应商的信息。
Select s.sid from suppliers s, catalog c, parts p
where s.sid=c.sid and c.pid=p.pid and p.color='Red'
intersect
Select s.sid from suppliers s, catalog c, parts p
where s.sid=c.sid and c.pid=p.pid and p.color='Green';
如何使用atleast
为
“查找供应至少两个红色部件和至少两个绿色部件的供应商的sids。”
答案 0 :(得分:3)
我个人会避免使用第一个回复中的子选择的查询。这是一个使用带有GROUP BY和HAVING子句的查询的解决方案。您只需计算出红色和绿色,并在具有您想要的统计数据的供应商的HAVING中进行过滤。请注意,加入供应商表是不必要的。
SELECT
c.sid,
SUM(CASE WHEN p.color='Red' THEN 1 ELSE 0 END) AS redCt,
SUM(CASE WHEN p.color='Green' THEN 1 ELSE 0 END) AS greenCt
FROM
catalog c
JOIN parts p ON c.pid = p.pid
GROUP BY c.sid
HAVING redCt >= 2 AND greenCt >= 2
答案 1 :(得分:0)
试试这个:
select sid from
(select
s.sid sid,
sum(case when p.color = 'Red' then 1 else 0 end) as red,
sum(case when p.color = 'Green' then 1 else 0 end) as green
from suppliers s
left join catalog c on s.sid = c.sid
left join parts p on p.pid = c.pid
group by s.sid) s
where
green >= 2 and red >= 2
我们的想法是建立供应商列表,计算他们提供的红色和绿色部件的数量,然后按阈值进行过滤。
答案 2 :(得分:0)
试试这个,
SELECT * FROM ( 从供应商处选择s.sid,ROW_NUMBER()OVER(由p.solor ORDER by s.sid DESC划分)ROWNUM s.sid = c.sid上的内连接目录c INNER JOIN零件p 在c.pid = p.pid,其中p.color =' Red'或者p.color =' Green' )T4 在哪里ROWNUM> = 2