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;