[英]Oracle SQL Missing Keyword
我正在嘗試顯示給定月份(JAN-14)中最受歡迎的產品(format_id),並按每個format_id的數量對它們進行分組。
這是我的查詢:
select PRODUCT, AMOUNT
from (Select Order_108681091.Order_Date, order_line_108681091.Format_id as Product,
COUNT(*) AS AMOUNT FROM order_line_108681091
Inner Join order_108681091
On order_108681091.order_id = order_line_108681091.order_id
Where order_108681091.Order_Date like '%JAN-14%'
group by Format_id
order by AMOUNT desc);
我怎樣才能做到這一點 ?
您必須指定內部聯接:
inner join order_108681091 ON order_1078681091.ID = order_line_018681091.ID
或類似的東西。 另外,除非將日期存儲為字符串而不是日期時間數據類型,否則where子句可能不會起作用。
ORDER BY
,因此將其刪除。 SELECT
刪除Order_date
SELECT l.Format_id as PRODUCT, COUNT(*) AS AMOUNT FROM order_line_108681091 l INNER JOIN order_108681091 o ON o.order_id = l.order_id WHERE o.Order_Date LIKE '%JAN-14%' GROUP BY l.Format_id;
您根本不需要子查詢。 而且,我很不like
直接在約會上使用。 將日期明確轉換為字符串:
select ol.Format_id as Product, COUNT(*) AS AMOUNT
from order_line_108681091 ol Inner Join
order_108681091 o
ON o.order_id = ol.order_id
where to_char(o.Order_Date, 'MMM-YYYY') = 'JAN-2014'
group by ol.Format_id
order by count(*) desc;
實際上,如果您在OrderDate
上具有索引,則可以使用以下內容(以利用索引):
select ol.Format_id as Product, COUNT(*) AS AMOUNT
from order_line_108681091 ol Inner Join
order_108681091 o
ON o.order_id = ol.order_id
where o.Order_Date >= to_date('2014-01-01', 'YYYY-MM-DD') and
o.Order_Date < to_date('2014-02-01', 'YYYY-MM-DD')
group by ol.Format_id
order by count(*) desc;
將函數從列移到常量可以在列上使用索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.