2017-03-04 83 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,[回覆@GurV](http://stackoverflow.com/a/42591833/5221149)可能是最好的選擇。 – Andreas

回答

1

在MySQL中,你不能直接使用那樣的別名。您將需要重新編寫子查詢。

試試這個:

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 
     ) 

目前尚不清楚你正在使用的DBMS。如果您使用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已經創建爲臨時表時,從執行語句執行,並在那之後where子句可以引用v表? –

+0

@Varun - 是臨時表創建的,但它不可用於這樣的查詢。它已被查詢。如果您使用SQL Server(在答案中添加了一個示例),則一種選擇是使用CTE(公用表表達式)。 – GurV