簡體   English   中英

Oracle SQL缺少關鍵字

[英]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子句可能不會起作用。

  1. 您說您有條件,所以讓我們從添加它開始。
  2. 無需ORDER BY ,因此將其刪除。
  3. 從子查詢SELECT刪除Order_date
  4. 使用別名
  5. 子查詢本身就足夠了。
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM