2017-03-04 20 views
-1

私は別の顧客との旅行を最も多く受けたcaridを探しています。私はそれを行う方法について考えているので、私は完全な解決策を望んでいません。私は、クエリを実行すると、私はエラーを取得する:SQLクエリの正確性

Table 'test.v' doesn't exist 
1 statement failed. 

私のSQLクエリは次のとおりです。

SELECT * FROM (
    (
     SELECT carid, COUNT(DISTINCT cusid) AS counter 
     FROM trips 
     GROUP BY carid 
    ) v 
) 
WHERE v.counter = (
     SELECT MAX(counter) 
     FROM v 
) 

私はv.counter=2を選択

は私が適切な結果を得ます。誰も私に何が起こっているか説明できますか?

+3

MySQLまたはSQL Server? – GurV

+0

あなたの質問がMS SQL Serverに関するものであれば、['with'](https://msdn.microsoft.com/en-us/library/ms175972.aspx)や[' over'](https:// msdn.microsoft.com/en-us/library/ms189461.aspx)を参照してください。 MySQLでは、[answer by @GurV](http://stackoverflow.com/a/42591833/5221149)が最適なオプションです。 – Andreas

答えて

1

MySQLでは、このようなエイリアスを直接使用することはできません。サブクエリを再度書き直す必要があります。それはあなたが使用しているDBMSかが明確ではありません

select * 
from (
    select carid, count(distinct cusid) as counter 
    from trips 
    group by carid 
    ) v 
where v.counter = (
     select max(counter) 
     from (
      select count(distinct cusid) as counter 
      from trips 
      group by carid 
      ) t 
     ) 

はこれを試してみてください。 SQL Serverを使用している場合は、CTEを使用できます。

with v 
as (
    select carid, count(distinct cusid) as counter 
    from trips 
    group by carid 
    ) 
select * 
from v 
where counter = (
     select max(counter) 
     from v 
     ) 
+0

なぜですか?はvではありません。from文が実行された後に一時表として作成された後、where節がv表を参照できますか? –

+0

@Varun - はい一時テーブルが作成されましたが、そのようなクエリでは使用できません。それはすでに質問されています。 1つのオプションは、SQLサーバーを使用している場合(共通のテーブル式)のCTE(回答の例を追加)を使用しています。 – GurV

関連する問題