2016-04-11 13 views
0
SELECT ProductID 
FROM OrderLine_T 
GROUP BY ProductID 
ORDER BY COUNT(ProductID) DESC 

この商品を注文していますが、LIMITまたはROWNUMは何らかの理由で機能していません。最も頻繁に注文される単一の製品のみを使用して照会する必要があります。 Im Teradataを使用し、データベース名はdb_pvfc10_bigです。イムその私の最初の質問と 最も頻繁に注文される製品はどれですか?

SQL

を使用して初心者イム混乱の質問には申し訳ありませんが、事前

+5

タグを使用しているデータベースとあなたの質問。 –

+0

なぜlimtが動作しないのですか(より興味深いです) – Saikios

+0

Im Teradataを使用し、データベース名はdb_pvfc10_bigです。私の最初の質問と私はSQLの初心者です。 –

答えて

0

あなたはselect文のカウント(商品コード)を含む試みることができるでいただきありがとうございます。一部のSQLデータベースでは、「制限」ではなく「トップ」というキーワードが使用されています。だから、あなたがそれらのいずれかを使用している場合(たとえばのTeradata SQLのように)、次の手順を実行します。

select top 1 ProductID, count(ProductID) 
from OrderLine_T 
group by ProductID 
order by 2 desc; 
1

LIMITキーワードは、標準に対するMySQL固有の拡張機能です。

ROWNUMは、Oracle固有の疑似列です。

LIMITROWNUMが「機能していません」と表示される可能性があることは間違いありません。

質問を示すものではありませんRDBMSが使用されている ... MySQLの、PostgreSQLのは、Oracle、SQL Serverの、DB2、Teradataのなど

(注:使用して専用として "機能していません"

説明は、クエリの実行が何らかの種類のエラーを返すかどうか、またはクエリが実行されており、期待されていない結果セットを返すかどうかを示すものではありません。

あなたが「機能していない」と記述した文は、表示されていません。

結果を得るための1つのANSI標準SQLアプローチは、標準MAX()集約を使用してその「最大」値を取得しています。これを行う1つの方法は、インラインビューを使用することです。例えば:また、インライン・ビューとして使用することができる

SELECT MAX(s.cnt) AS max_cnt 
    FROM (SELECT COUNT(t.productid) AS cnt 
      FROM orderline_t t 
      GROUP BY t.productid 
     ) s 

...

SELECT MAX(q.productid) 
    FROM (SELECT MAX(s.cnt) AS max_cnt 
      FROM (SELECT COUNT(t.productid) AS cnt 
         FROM orderline_t t 
        GROUP BY t.productid 
        ) s 
     ) r 
    JOIN (SELECT p.productid 
       , COUNT(p.productid) AS cnt 
      FROM orderline_t p 
      GROUP BY p.product_id 
     ) q 
     ON q.cnt = r.max_cnt 

なお回の同一の「最大」数を注文された2つの以上の製品がある場合、このクエリは、それらのproductidのうちの1つだけを返します。

これは、ほとんどのリレーショナルデータベースで機能するはずです。

同等の結果を返す他のクエリパターンがあります。

しかし、この例は、ほとんどのRDBMSがSQL標準への拡張を提供する理由を説明するのに役立ちます。

MySQLの」... BY ... LIMIT 1" ORDER

SQL Serverの "TOP 1を選択..."

など

+0

Im Teradataを使用し、データベース名はdb_pvfc10_bigです。私の最初の質問と私は初心者のSQLを使用して私は混乱の質問申し訳ありません申し訳ありません –

関連する問題