2016-06-14 54 views
0

我有一個查詢,我輸出了一些成果計數行JOIN

SELECT 
    t1.busName, 
    t1.busCity, 
    COUNT(t2.ofr_id) AS cntOffers 
FROM t1 
LEFT JOIN t2 ON (t2.ofr_busID = t1.busID) 

以上返回查詢只有一行,但是,如果我刪除COUNT,只留下下面的查詢,我得到多個結果。我錯過了什麼?我怎樣才能從第一個表中獲取結果,同時從t2獲得相關的結果呢?

SELECT 
    t1.busName, 
    t1.busCity 
FROM t1 
LEFT JOIN t2 ON (t2.ofr_busID = t1.busID) 
+0

在第一個查詢中添加'GROUP BY t1.busName, t1.busCity' – Mihai

回答

2

您需要group by

SELECT t1.busName, t1.busCity, 
     COUNT(t2.ofr_id) AS cntOffers 
FROM t1 LEFT JOIN 
    t2 
    ON t2.ofr_busID = t1.busID 
GROUP BY t1.busName, t1.busCity; 

大多數數據庫將在您的查詢的版本,返回一個錯誤,因爲你必須在SELECT未聚集和聚合列。

+0

哦,我需要GROUP BY的每一列嗎? – santa

+1

@santa。 。 。將所有非聚合列包含在「GROUP BY」中是一個好主意 - 除非你真的真的知道你在做什麼。 –

0

實際上,您的第一個查詢中的COUNT()似乎在該字段上強制執行一個GROUP BY(因爲聚合),這就解釋了爲什麼只有一行,但這並不意味着您只有一行。

看看這個SQL Fiddle

的MySQL 5.6架構設置

CREATE TABLE TestData (a int, b int); 

INSERT INTO TestData 
    (a, b) 
VALUES 
    (1, 1), 
    (2, 2), 
    (3, 3); 

查詢

SELECT a, count(b) from TestData 

Results

| a | count(b) | 
|---|----------| 
| 1 |  3 | 

正如戈登·利諾夫建議,你需要以複製相同的行爲,而不COUNT明確使用GROUP BY