#sql
Есть таблица org (name, emp_id). Для каждого возможного значения name, необходимо вывести количество уникальных emp_id. Можно ли это сделать с помощью count() или как ещё? UPD: Немного расшифрую. Допустим (name) (emp_id) apple 85962 apple 14654 intel 14654 intel 14654 В результате необходимо получить что-то вроде (name) count(emp_id) apple 2 intel 1 т.е. если emp_id повторяется в разных name, то их необходимо подсчитывать
Ответы
Ответ 1
Первая интерпретация вашего вопроса Для каждого name подсчитать уникальное количество emp_id SELECT name, COUNT(DISTINCT emp_id) AS qty FROM org GROUP BY name Вторая интерпретация, подсчитать так, что бы исключить emp_id встречающиеся у разных name Для этого пойдем от обратного подсчитаем количество name у emp_id, то есть нам необходимо исключить из выборки emp_id встречающиеся у нескольких name SELECT name, COUNT(DISTINCT emp_id) AS qty FROM org WHERE NOT emp_id IN ( SELECT emp_id FROM org GROUP BY emp_id HAVING COUNT(DISTINCT name) > 1 ) GROUP BY name Унифицировать или нет дело ваше, смотря что там лежит и какОтвет 2
SELECT `emp_id` FROM `table_name` GROUP BY `emp_id` HAVING COUNT(`emp_id`) = 1 UPD Как-то всё уж очень мудрёно у всех получается. )) Если надо сравнивать не только значение поля emp_id, но и соответствующее ему поле name, то почему бы их не объединить? SELECT `emp_id`, CONCAT(`name`,`emp_id`) AS uv FROM `uniq` GROUP BY uv HAVING COUNT(uv) = 1 Вот что мы получим в итоге: http://sqlfiddle.com/#!2/afac1/1 Всё, что теперь остается сделать, так это высчитать количество уникальных записей и сгруппировать по полю name. Итоговый запрос: SELECT t1.`name`,COUNT(t1.`emp_id`) AS cnt FROM `uniq` t1 WHERE CONCAT(t1.`name`,t1.`emp_id`) IN ( SELECT CONCAT(t2.`name`,t2.`emp_id`) AS uv FROM `uniq` t2 GROUP BY uv HAVING COUNT(uv) = 1 ) GROUP BY t1.`name` Желающим посмотреть в действии - http://sqlfiddle.com/#!2/afac1/14/0 Вот как бы и всё ))Ответ 3
Йоксель! select name, count(distinct emp_id) from my_temp group by name ;Ответ 4
group by name может быть? А дальше их distinct update 1 ok, см сюда Mysql: Select unique values within the group? Ну в любом случае, будут вложенные запросы. update 2 select t1, count(t2) as t4 from ( select substring(new1,0,charindex('/',new1)) as t1, substring(new1,charindex('/',new1)+1,len(new1)) as t2, new1 from (select distinct name + '/' + emp_id as new1 from org) temp1 ) temp2 group by t1
Комментариев нет:
Отправить комментарий