Получите максимум с другими данными - PullRequest
0 голосов
/ 25 мая 2011

Я должен прийти и спросить это, потому что я уже злюсь и плачу, и все, потому что это действительно убивает меня.Я ненавижу SQL.Но это должно быть сделано.Веб-сайт использует SQL.

У меня есть эти таблицы (сокращенные до необходимого, а не реального 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 brand и SELECT d.name, d.d_id.Это действительно бессмысленно.

Пожалуйста, помогите мне, прежде чем я выпрыгну из окна.

1 Ответ

0 голосов
/ 25 мая 2011

То, что я действительно, действительно, действительно не понимаю в SQL, - это то, почему он не позволяет мне использовать GROUP BY и ВЫБРАТЬ d.name, d.d_id.Это действительно бессмысленно.

Потому что, если вы это сделаете, счет будет для каждого отдельного d.name, d.d_id.Это не то, что вы хотите.

Вы определенно хотите прочитать учебные пособия о том, как работает группа по.которые доставляют большинство статей.

В этом случае вам нужно что-то вроде:

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
...