2015-10-18 2 views
0

У меня есть этот запрос, который возвращает разные столбцы и количество столбцов. он работает отлично.sql select columns, count и sum count

SELECT DISTINCT w.title, w.date ,COUNT(f.fid) AS f_count , GROUP_CONCAT(name) 
FROM Faculty f 
INNER JOIN Attend a ON a.fid = f.fid 
INNER JOIN Workshop w ON w.wid = a.wid 
WHERE f.did = 1 
GROUP BY w.title 
ORDER BY w.wid 

В дополнение к этим полям я также хочу вернуть SUM столбца f_count. Я пытался использовать вложенные запросы, как это:

SELECT title, date,f_count ,names,COUNT(f_count) AS total_f 
FROM (SELECT DISTINCT w.title AS title, w.date AS date,COUNT(f.fid) AS f_count , GROUP_CONCAT(name) AS names 
FROM Faculty f 
INNER JOIN Attend a ON a.fid = f.fid 
INNER JOIN Workshop w ON w.wid = a.wid 
WHERE f.did = 1 
GROUP BY w.title 
ORDER BY w.wid) AS total_fac 

сумма будет возвращать правильное значение, но я только получить одну строку из внутреннего запроса. Я знаю, что IN и ANY возвращают несколько строк из подзапросов, но я не вижу, как я могу использовать его в моем случае.

Мой вопрос: Как я могу получить все строки + СУММУ COUNT?

Я рассмотрел другие вопросы здесь, но не нашел то, что искал.

+0

Вы 'группы by'ing на один столбец, поэтому сумма графа будет числом всех строк, которые будут возвращены, если ему не было там, я правильно? –

+0

Мне нужно, чтобы GROUP By, чтобы выбрать различные значения. Если я удалю GROUP BY, запрос вернет избыточные значения. – Alsmayer

ответ

0

Вашего подзапрос возвращает один ряд, так как сумма ваших подсчетов на самом деле размер ваших результирующий/Начальное COUNT(*) без оговорки GROUP BY,

Также ваше поле даты выбирается случайным образом из-за GROUP BY, это другое вопрос.

Чтобы не использовать это значение для всех ваших строк, это необязательно. Вы можете запустить тот же запрос снова без GROUP BY.

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

+0

. Мне сказали, что это правильный запрос. Я поклонник прозрачности. Иногда. –

+0

Первая линия вопроса. «У меня есть этот запрос, который возвращает разные столбцы и количество столбцов. Он отлично работает». –

+0

Проверьте мои изменения. –

0

Ответ @Octopi помог мне разобраться, что случилось с моим запросом и как правильно это сделать.

Я хотел был «номер» факультета DISTINCT от отдела, который посетил любую мастерскую. Тем не менее, предыдущий запрос, который я опубликовал в этом вопросе, заключался в том, что я получил «общая сумма» присутствовавших преподавателей в мастерских (не отчетливо).

Так что мой подход был неправильным для начала. Поэтому я оставил запрос первого как и создал запрос второго получить мне номер DISTINCT факультета, что мне нужно следующим образом:

SELECT COUNT(name) AS total_fac FROM (SELECT DISTINCT name 
FROM Faculty f 
INNER JOIN Attend a ON f.fid = a.fid 
WHERE f.did = 1) AS total 

это у меня, где я хочу. Обсуждая этот вопрос с вами помогли мне попасть

Спасибо :)