2014-10-02 56 views
3

我有以下SQL表列...SQL SELECT ID和項目的數量在同一個表

id | item | position | set 
---------------------------  
1 | 1 |  1 | 1 
2 | 1 |  1 | 2 
3 | 2 |  2 | 1 
4 | 3 |  2 | 2 

查詢我需要得到滿足set='1',同時該行的所有ID統計在同一個表中有多少個與item號碼相關的實例,而不管set

這是我一直在擺弄那麼遠,

SELECT 
    j1.item, 
    (SELECT count(j1.item) FROM table_join AS j2) AS count 
FROM 
    table_join AS j1 
WHERE 
    j1.set = '1'; 

...雖然子查詢返回多個行。通過上述數據的第一個項目應具有計數2,所有其他項目應該有1

+2

您使用的是什麼RDBMS? – 2014-10-02 01:56:07

+1

這沒有多大意義。你需要一種方式,但所有的方式都是另一種方式?這是功課嗎? – MPelletier 2014-10-02 02:07:02

+0

這是HTML模板的專用JOIN表。當刪除模板時,我需要計算這些項目是否被多個模板使用,如果是的話,我不應該刪除該項目。我試圖保持我的數據庫清理未使用過期的數據。另外我使用的是MySQL,但是因爲Oracle是邪惡的,所以在寫作過程中我寫了它與PostgreSQL儘可能兼容。 – John 2014-10-02 02:10:58

回答

2

計數這應該工作:

SELECT 
    j.id 
, (SELECT COUNT(*) FROM table_join i WHERE i.item = j.item) AS count 
FROM table_join j 
WHERE set='1' 

這類似於查詢,但是子查詢與WHERE子句的外部查詢進行協調。

Demo

2

作爲值得測試性能的替代方案,您可以使用JOIN而不是從屬子查詢;

SELECT tj.id, COUNT(tj2.id) count 
FROM table_join tj 
LEFT JOIN table_join tj2 ON tj.item = tj2.item 
WHERE tj.`set`=1 
GROUP BY tj.id 

An SQLfiddle to test with

+0

如果我得到相同的確切結果,我會更好的表現;我只是不確定如何基準兩個查詢找出哪個更好? – John 2014-10-02 08:06:05

+0

@John如果它不是一個非常頻繁的查詢,或者直接關注您擁有的數據量,那麼使用哪個查詢應該沒有關係。如果您稍後看到原始查詢運行緩慢,只需將其添加爲考慮/測試的內容即可。使用真實數據/索引進行測試始終是後期評估的最佳方式。 – 2014-10-02 08:12:53

+0

它的工作原理如此+1,謝謝! – John 2014-10-02 08:18:14

相關問題