2014-02-11 41 views
0

我有如下表:SQLite的選擇所有的記錄和統計

CREATE TABLE sometable (my_id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING, number STRING); 

運行此查詢:

SELECT * FROM sometable; 

產生以下輸出:

1|someone|111 
2|someone|222 
3|monster|333 

隨着這三個領域我還想包含一個計數,表示同一個名字在表中存在的次數。

我明明嘗試:

SELECT my_id, name, count(name) FROM sometable GROUP BY name; 

儘管這不會給我一個單獨的結果行對每條記錄。

理想我想有以下的輸出:

1|someone|111|2 
2|someone|222|2 
3|monster|333|1 

凡第4列表示這個號碼存在的時間量。

感謝您的任何幫助。

+0

你必須使用子查詢 – Jain

回答

1

您可以用select子句中相關子查詢做到這一點:

Select st.*, 
     (SELECT count(*) from sometable st2 where st.name = st2.name) as NameCount 
from sometable st; 

你也可以寫爲join到聚合子查詢:

select st.*, stn.NameCount 
from sometable st join 
    (select name, count(*) as NameCount 
     from sometable 
     group by name 
    ) stn 
    on st.name = stn.name; 

編輯:

至於性能,找出最好的方法是嘗試兩個並計時。當存在sometable(name)的索引時,相關子查詢將工作得最好。雖然聚合在MySQL中聲稱速度很慢,但有時候這種類型的查詢會得到令人驚訝的好結果。最好的答案是測試。

0
Select *, (SELECT count(my_id) from sometable) as total from sometable