至少在SQL Query中使用

时间:2014-12-09 03:43:30

标签: mysql

我一直致力于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。”

3 个答案:

答案 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

http://sqlfiddle.com/#!2/85e8c1/14

答案 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

我们的想法是建立供应商列表,计算他们提供的红色和绿色部件的数量,然后按阈值进行过滤。

SQLFiddle

答案 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