2011-05-25 117 views
0

我得來問這個問題,因爲我已經生氣,哭了,所有的事情,因爲這真的殺了我。我討厭SQL。但它必須完成。網站使用SQL。用其他數據獲得最大值

我有這些表(縮短至necessessary,而不是真正的SQL):

CREATE TABLE deliverer(d_id INT PRIMARY KEY, name VARCHAR(80)); 
CREATE TABLE article(a_id INT PRIMATY KEY, brand VARCHAR(80)); 
CREATE TABLE delivers(d_id FOREIGN KEY(deliverer), a_id FOREIGN KEY(article)); 

我需要爲每個brand那些deliverers,可提供最多的文章。我來至於此,只有兩個小時的心靈扭曲後:

SELECT brand, MAX(cnt) 
FROM 
(SELECT COUNT(a.a_id) AS cnt, a.brand, d.d_id, d.name 
    FROM derliverer d, delivers l, article a 
    WHERE a.a_id = l.a_id AND l.d_id = d.d_id 
    GROUP BY a.brand, d.d_id, d.name) 
GROUP BY brand; 

我真的,真的,真的不明白有關SQL就是爲什麼它不會讓我GROUP BY brandSELECTd.name, d.d_id。這真的沒有意義。

在我跳出窗前請幫助我。

+0

您正在使用什麼RDBMS? – 2011-05-25 19:25:28

+0

我認爲這是DB2在生產中,不確定。在測試中使用MySQL。 – Lanbo 2011-05-25 19:27:49

回答

0

我真的,真的,真的沒有得到關於SQL的原因是它爲什麼不讓我GROUP BY品牌和SELECT d.name,d.d_id。這真的沒有意義。

因爲如果你這樣做,計數將針對每個不同的d.name,d.d_id。這不是你想要的。

你一定想讀一些tutorials關於如何工作的一組。

我需要爲每個品牌提供最多文章的送貨員。

在這種情況下,你需要這樣的東西:

select brand_id, count(*) as top_deliverer, deliverer_id, deliverer.etc. 
from some stuff 
group by brand_id, deliverer_id, deliverere.etc 
order by top_deliverer desc 
+0

Wel,它是有效的,但它不會給我所需的額外數據。我需要對品牌進行分組,但是也可以通過它獲得d.name,而不用分組。但是'max'功能迫使我按每一列進行分組。 – Lanbo 2011-05-25 19:38:30

+0

與原始表一起加入...或使用兩個單獨的查詢(可能會更好)。 – 2011-05-25 19:40:07

+0

後續行動:我相應地更新了我的答案。根據你的回答,你肯定需要通過陳述來閱讀該組,因爲你完全被它所做的事所困惑。您需要*在大多數數據庫中按其他列進行分組,並且如果您最終認爲使用子查詢的「編碼」優化將導致全表掃描(這遠遠不是最佳)。 – 2011-05-25 19:46:52