Sql 我看到了我以前从未想过的重组选择。你的建议看起来很有希望,给了我希望。我正在尝试应用它们…谢谢。我能够应用您的建议来重新构造查询,以避免我看到的失败。然后我意识到,重新构造查询以使连接工作,并没有达到加快查询速度的最终目标。我连接到的派生表独立于它连接到主

Sql 我看到了我以前从未想过的重组选择。你的建议看起来很有希望,给了我希望。我正在尝试应用它们…谢谢。我能够应用您的建议来重新构造查询,以避免我看到的失败。然后我意识到,重新构造查询以使连接工作,并没有达到加快查询速度的最终目标。我连接到的派生表独立于它连接到主,sql,oracle,Sql,Oracle,我看到了我以前从未想过的重组选择。你的建议看起来很有希望,给了我希望。我正在尝试应用它们…谢谢。我能够应用您的建议来重新构造查询,以避免我看到的失败。然后我意识到,重新构造查询以使连接工作,并没有达到加快查询速度的最终目标。我连接到的派生表独立于它连接到主查询的字段;我忘记了,在联接可以工作之前,必须设置和定义联接表,所以我试图通过联接本身来限制它是没有意义的。你的想法帮助我看到了重组的选择,尽管这是我以前从未想过的。 SELECT emp.employeeid, emp.firstname


我看到了我以前从未想过的重组选择。你的建议看起来很有希望,给了我希望。我正在尝试应用它们…谢谢。我能够应用您的建议来重新构造查询,以避免我看到的失败。然后我意识到,重新构造查询以使连接工作,并没有达到加快查询速度的最终目标。我连接到的派生表独立于它连接到主查询的字段;我忘记了,在联接可以工作之前,必须设置和定义联接表,所以我试图通过联接本身来限制它是没有意义的。你的想法帮助我看到了重组的选择,尽管这是我以前从未想过的。
 SELECT emp.employeeid, emp.firstname
 CASE 
 WHEN (SELECT count(*) FROM o WHERE o.shipperid <= 15) > 20 THEN 'Yes'
 WHEN (SELECT count(*) FROM o WHERE o.shipperid <= 15) > 10 THEN 'Almost'
 ELSE 'No'
 END AS "Quota Met"
 FROM Employee emp
 INNER JOIN 
 (SELECT employeeid, shipperid FROM Orders 
  WHERE orderdate > sysdate - 30) o
  ON o.employeeid = emp.id
 WHERE emp.zipcode = 22151;
 WITH MyOrders AS
 (SELECT employeeid, shipperid FROM Orders 
  WHERE orderdate > sysdate - 30
 )
 SELECT emp.id, emp.name, o
  CASE 
   WHEN (SELECT COUNT(*) FROM MyOrders o WHERE o.shipperid <= 15) > 20 THEN 'Yes'
   WHEN (SELECT COUNT(*) FROM MyOrders o WHERE o.shipperid <= 15) > 10 THEN 'Almost'
  ELSE 'No'
  END AS "Quota Met"
 FROM Employee emp
 WHERE emp.zipcode = 22151;
SELECT emp.employeeid
, emp.firstname
, CASE 
  WHEN (
    SELECT count(*) 
    FROM  (
    SELECT employeeid, shipperid 
    FROM Orders 
    WHERE orderdate > sysdate - 30
    ) o 
    WHERE o.shipperid <= 15
  ) > 10 THEN 'Almost'
WHEN (
  SELECT count(*) 
  FROM  (
    SELECT employeeid, shipperid 
    FROM Orders 
    WHERE orderdate > sysdate - 30
    ) o
    WHERE o.shipperid <= 15) > 20 THEN 'Yes'
ELSE 'No' END AS "Quota Met"
FROM Em  ployee emp
INNER JOIN  (
SELECT employeeid, shipperid 
FROM Orders 
WHERE orderdate > sysdate - 30

) o ON o.employeeid = emp.id
WHERE emp.zipcode = 22151;
create my_view as  
SELECT employeeid, shipperid 
  FROM Orders 
  WHERE orderdate > sysdate - 30


SELECT emp.employeeid
, emp.firstname
, CASE 
  WHEN (
    SELECT count(*) 
    FROM my_view o
    WHERE o.shipperid <= 15
  ) > 10 THEN 'Almost'
WHEN (
  SELECT count(*) 
  FROM  my_view o
    WHERE o.shipperid <= 15) > 20 THEN 'Yes'
ELSE 'No' END AS "Quota Met"
FROM Em  ployee emp
INNER JOIN  my_viewq o ON o.employeeid = emp.id
WHERE emp.zipcode = 22151;
SELECT emp.employeeid, emp.firstname,
   CASE 
     WHEN count(o.shipperid) > 20 THEN 'Yes'
     WHEN count(o.shipperid) > 10 THEN 'Almost'
     ELSE 'No'
   END AS "Quota Met"
FROM Employee emp
LEFT JOIN (
  SELECT employeeid, shipperid
  FROM Orders 
  WHERE orderdate > sysdate - 30
  AND o.shipperid <= 15
) o
ON o.employeeid = emp.id
WHERE emp.zipcode = 22151
GROUP BY emp.employeeid, emp.firstname;
SELECT emp.employeeid, emp.firstname,
   CASE 
     WHEN count(CASE WHEN o.shipperid <= 15 THEN o.shipperid END) > 20 THEN 'Yes'
     WHEN count(CASE WHEN o.shipperid <= 15 THEN o.shipperid END) > 10 THEN 'Almost'
     ELSE 'No'
   END AS "Quota Met"
FROM Employee emp
LEFT JOIN (
  SELECT employeeid, shipperid
  FROM Orders 
  WHERE orderdate > sysdate - 30
) o
ON o.employeeid = emp.id
WHERE emp.zipcode = 22151
GROUP BY emp.employeeid, emp.firstname;