[英]Oracle SQL syntax issue - how do I correctly combine 2 queries without error
所以我有两个疑问。 第一个返回网格部分的列表,以及该网格部分的订单数:
SELECT DISTINCT customer.grid_section, count(orders.order_pk)
FROM customer INNER JOIN orders
ON customer.customer_pk = orders.customer_fk
GROUP BY customer.grid_section;
这工作正常并输出(code_output_1):
第二个查询输出每个网格部分的平均订单数量:
SELECT ROUND(
(COUNT(DISTINCT orders.order_pk)) /
(COUNT(DISTINCT customer.grid_section))) as avg
FROM customer, orders;
同样,这工作正常并输出(code_output_2):
我想要实现的是一个输出查询 1 内容的查询,其中主查询 1 中的 count(orders.order_pk) 列等于第二个查询中计算的平均值。
我尝试了多种方法,包括:
SELECT DISTINCT customer.grid_section, count(orders.order_pk)
FROM customer INNER JOIN orders
ON customer.customer_pk = orders.customer_fk
WHERE count(orders.order_pk)
(SELECT ROUND(
(COUNT(DISTINCT orders.order_pk)) /
(COUNT(DISTINCT customer.grid_section))) as avg
FROM customer, orders
)
GROUP BY customer.grid_section;
这给出了一个错误(error_1):
***ORA-00934: group function is not allowed here
00934. 00000 - "group function is not allowed here"
*Cause:
*Action:
Error at Line: 4 Column: 7***
也:
SELECT DISTINCT customer.grid_section,
COUNT(orders.order_pk) AS "tot_orders"
FROM customer, orders, (SELECT ROUND(
(COUNT(DISTINCT orders.order_pk)) /
(COUNT(DISTINCT customer.grid_section))) AS "avg_orders"
FROM customer, orders) subq1
WHERE "tot_orders" = "avg_orders"
这给了我另一个错误(error_2):
*ORA-00904: "tot_orders": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Error at Line: 7 Column: 7*
如果有人可以就我做错了什么或如何实现最终结果提出任何建议,我将不胜感激。
谢谢。
我不太清楚第二个查询的意图,但我怀疑您正在尝试过滤第一个结果集(每个网格部分的订单数)以查找其计数与计数的(四舍五入)平均值相匹配的记录。
如果是这样,您可以使用窗口函数:
SELECT *
FROM (
SELECT c.grid_section, COUNT(*) cnt_orders,
AVG(COUNT(*)) OVER() avg_cnt_orders
FROM customer c
INNER JOIN orders o ON c.customer_pk = o.customer_fk
GROUP BY c.grid_section
) t
WHERE cnt_orders = ROUND(avg_cnt_orders)
请注意,我在您的查询中删除了DISTINCT
; 它们在诸如您的第一个 SQL 之类的聚合查询中不需要 - 但您的问题没有提供有关不同实体之间基数的很多详细信息,因此您可能需要根据您的实际设计进行调整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.