2016-09-10 11 views
0

私はオペレータのために、このテーブルを持っている:行の選択最も

+--------------------------------+ 
| ProviderID | ProviderName | 
+---------------+----------------+ 
|  1  | Movistar  | 
+---------------+----------------+ 
|  2  | Vadafone  | 
+---------------+----------------+ 
|  3  | Orange  | 
+---------------+----------------+ 

そしてまた、私は、これらの事業者が提供する計画のこのテーブルを持っています。

+--------------------------------+ 
| PlanID  | ProviderID | 
+---------------+----------------+ 
|  1  | 2   | 
+---------------+----------------+ 
|  2  | 2   | 
+---------------+----------------+ 
|  3  | 2   | 
+---------------+----------------+ 
|  4  | 1   | 
+---------------+----------------+ 
|  5  | 3   | 
+---------------+----------------+ 

私は、最も多くのプランを持つプロバイダだけを印刷したいと思います。これは私がこれまで持っているものです。

SELECT O.ProviderId, COUNT(Pl.ProviderId) as numberOfPlans 
FROM Plan Pl 
INNER JOIN Provider O ON O.ProviderId= P.ProviderId 
GROUP BY O.ProviderName 

そして、これがすべてのプロバイダ名と私はほとんどの計画を持っているものを印刷する必要がありながら、彼らが持っているプラ​​ンの数を表示しますので、この場合には、それが唯一のVadafoneだろう3つの計画があります。 (他のプロバイダがプランの最大値を持っていれば、同様に印刷されます)。 ご迷惑をおかけして申し訳ございませんが、問題をどのように指定するべきか正確には分かりませんでした。

+0

私はどこかでMAX()関数を使うべきだと思っていますが、どこで分かりません。 – enigmq

答えて

0

あなたがTOPを使用することができますSQL Serverを使用している場合。例えば、ほとんどの計画とプロバイダのいずれかを取得する:他のデータベースで

SELECT TOP 1 pl.ProviderId, COUNT(*) as numberOfPlans 
FROM Plan pl 
GROUP BY pl.ProviderId 
ORDER BY numberOfPlans DESC; 

を、これは通常、次のようになります。

SELECT pl.ProviderId, COUNT(*) as numberOfPlans 
FROM Plan pl 
GROUP BY pl.ProviderId 
ORDER BY numberOfPlans DESC 
FETCH FIRST 1 ROW ONLY; 

か:

SELECT pl.ProviderId, COUNT(*) as numberOfPlans 
FROM Plan pl 
GROUP BY pl.ProviderId 
ORDER BY numberOfPlans DESC 
LIMIT 1; 

結びつきがある場合SQL Serverでは、次の操作を実行できます。

SELECT TOP (1) WITH TIES pl.ProviderId, COUNT(*) as numberOfPlans 
FROM Plan pl 
GROUP BY pl.ProviderId 
ORDER BY numberOfPlans DESC; 

注:

  • ProviderIdPlanテーブルにあるので、あなたは、ProviderテーブルにJOINは必要ありません。
  • の条件は、SELECTの列と同じである必要があります。
+0

TIESのものはまさに私が必要としていたものでした。 INNER JOINについて私はプロバイダのIDではなく、演算子のテーブルにある名前を表示する必要があると思います。 – enigmq

0

order bynumberOfPlans

よう
SELECT O.ProviderId, 
COUNT(Pl.ProviderId) as numberOfPlans 
FROM Plan Pl 
INNER JOIN Provider O ON O.ProviderId= P.ProviderId 
GROUP BY O.ProviderName 
ORDER BY numberOfPlans DESC; 
+0

これは実際に私が与えたコードとまったく同じ結果を与えます:) – enigmq

関連する問題