2015-02-19 4 views
0

Я пытаюсь подсчитать различные специальности, участвующие в различных курсах программы. Я сделал это в основном, но заметил, что я рассчитываю дублировать имена пользователей, если они зарегистрированы для нескольких курсов. Можете ли вы помочь мне получить тег DISTINCT где-нибудь в этом запросе?MySQL - Отфильтровать последний элемент

SELECT a.`major_desc` AS `major`, 
(SELECT COUNT(a.`major_desc`) FROM all_students WHERE major_desc=`major` LIMIT 1) AS `count` 
FROM all_students AS a 
INNER JOIN all_course_reg AS b ON a.username=b.username 
INNER JOIN courses AS c ON b.`crn`=c.`crn` 
GROUP BY `major` 

EDIT: sqlfiddle ->http://sqlfiddle.com/#!2/81bb0/3/0

+1

Если вам нравится, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry

+0

@Strawberry, спасибо, что сообщили мне, что делать. Вот вы: http://sqlfiddle.com/#!2/81bb0/3/0 – doublenit

+0

Как вы увидите в sqlfiddle выше, я получаю счет 3 для major1 (все 3 из Jim Halpert), а Я хотел бы дополнительно фильтровать его и считать только один раз. – doublenit

ответ

0

Здесь мы идем. Благодаря моему мальчику 3 МГц.

SELECT a.major_desc, 
    (select count(a.username)) as test 
FROM all_students AS a 
WHERE EXISTS (select * from all_course_reg 
    inner join courses on courses.crn=all_course_reg.crn 
    where all_course_reg.username=a.username) 
GROUP BY a.major_desc 

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

0

Мне кажется, что это то, что вы после этого - я не знаю, что все, что другие вещи для ...

SELECT major_desc, COUNT(*) cnt 
    FROM all_students 
GROUP 
    BY major_desc; 
Смежные вопросы