Перейти к содержимому


Фотография

Помогите решить задачку по SQL


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 KIRILL

KIRILL

    Местный

  • Жители HomeNet
  • PipPip
  • 948 сообщений

Отправлено 17 May 2013 - 19:22

Имеется таблица, состоящая из трех полей: name, age, department (имя сотрудника, его возраст, отдел, в котором он работает). Нужно найти все отделы в которых работает не менее 3х человек старше 30 лет

#2 SeTM

SeTM

    Местный

  • Жители HomeNet
  • PipPip
  • 657 сообщений

Отправлено 17 May 2013 - 20:19

SELECT name from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3);

чето типо такого

upd а там список отделов надо, тогда чуть изменим этот запрос, SELECT dep from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3) group by dep;

Сообщение отредактировал SeTM: 17 May 2013 - 20:25


#3 Veritas

Veritas

    Пришедший

  • Жители HomeNet
  • 62 сообщений

Отправлено 17 May 2013 - 20:37

SELECT name from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3);

чето типо такого

upd а там список отделов надо, тогда чуть изменим этот запрос, SELECT dep from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3) group by dep;


Не прокатит. Выдаст список отделов где больше 3 человек и хотя бы один старше 30

#4 puYol

puYol

    Грустный и добрый

  • Жители HomeNet
  • PipPipPipPipPipPip
  • 4,838 сообщений

Отправлено 17 May 2013 - 23:12

SELECT name from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3);

чето типо такого

upd а там список отделов надо, тогда чуть изменим этот запрос, SELECT dep from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3) group by dep;


Не прокатит. Выдаст список отделов где больше 3 человек и хотя бы один старше 30

Так наверно сработает:
Код
select dep from (select dep from table where age > 30) group by dep having count(dep) >= 3

Сообщение отредактировал puYol: 17 May 2013 - 23:15


#5 atlant_is

atlant_is

    Капитан Очевидность

  • Супер Модератор
  • PipPipPipPipPipPipPip
  • 11,888 сообщений

Отправлено 17 May 2013 - 23:30

Работоспособность этого примера зависит от сервера, который используется. Не все умеют селектить из результатов подселекта


Код
select dep from table where  age > 30 group by dep having count(1) > 3

Наверное, самое простое. Не факт, что самое быстрое.

#6 SeTM

SeTM

    Местный

  • Жители HomeNet
  • PipPip
  • 657 сообщений

Отправлено 18 May 2013 - 01:53

SELECT name from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3);

чето типо такого

upd а там список отделов надо, тогда чуть изменим этот запрос, SELECT dep from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3) group by dep;


Не прокатит. Выдаст список отделов где больше 3 человек и хотя бы один старше 30

Так наверно сработает:
Код
select dep from (select dep from table where age > 30) group by dep having count(dep) >= 3


Код
select dep from (select dep from temp where age > 30) as t group by dep having count(dep) >= 3;

только так, а то будет ругаться в mysql

Сообщение отредактировал SeTM: 18 May 2013 - 01:53


#7 KIRILL

KIRILL

    Местный

  • Жители HomeNet
  • PipPip
  • 948 сообщений

Отправлено 18 May 2013 - 07:44

SELECT name from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3);

чето типо такого

upd а там список отделов надо, тогда чуть изменим этот запрос, SELECT dep from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3) group by dep;


Не прокатит. Выдаст список отделов где больше 3 человек и хотя бы один старше 30

Так наверно сработает:
Код
select dep from (select dep from table where age > 30) group by dep having count(dep) >= 3


Код
select dep from (select dep from temp where age > 30) as t group by dep having count(dep) >= 3;

только так, а то будет ругаться в mysql

Всем спасибо! Последний вариант работает, только почему-то в phpMyAdmin появляется сообщение, что запрос прошел ОК, но не показывается таблица с результатами.

#8 atlant_is

atlant_is

    Капитан Очевидность

  • Супер Модератор
  • PipPipPipPipPipPipPip
  • 11,888 сообщений

Отправлено 18 May 2013 - 14:11

только так, а то будет ругаться в mysql

MSSQL тоже будет. Алиас объявлять надо, точно smile.gif

Цитата(KIRILL @ May 18 2013, 8:44) <{POST_SNAPBACK}>
Всем спасибо! Последний вариант работает, только почему-то в phpMyAdmin появляется сообщение, что запрос прошел ОК, но не показывается таблица с результатами.

Мой вариант пробовали?

#9 puYol

puYol

    Грустный и добрый

  • Жители HomeNet
  • PipPipPipPipPipPip
  • 4,838 сообщений

Отправлено 18 May 2013 - 16:47

SELECT name from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3);

чето типо такого

upd а там список отделов надо, тогда чуть изменим этот запрос, SELECT dep from temp where age > 30 and dep in (select dep from temp group by dep having count(*) > 3) group by dep;


Не прокатит. Выдаст список отделов где больше 3 человек и хотя бы один старше 30

Так наверно сработает:
Код
select dep from (select dep from table where age > 30) group by dep having count(dep) >= 3


Код
select dep from (select dep from temp where age > 30) as t group by dep having count(dep) >= 3;

только так, а то будет ругаться в mysql

Алиасы можно писать без слова AS, а в конце строкой ниже поставить "/" без ";", но это не суть. Автор, а почему специализированными утилитами не пользуешься типа http://dev.mysql.com...ools/workbench/ или SQL Developer, много удобнее же, чем в веб интерфейс phpMyAdmin для разработки

#10 atlant_is

atlant_is

    Капитан Очевидность

  • Супер Модератор
  • PipPipPipPipPipPipPip
  • 11,888 сообщений

Отправлено 19 May 2013 - 12:33

Алиасы можно писать без слова AS, а в конце строкой ниже поставить "/" без ";", но это не суть. Автор, а почему специализированными утилитами не пользуешься типа http://dev.mysql.com...ools/workbench/ или SQL Developer, много удобнее же, чем в веб интерфейс phpMyAdmin для разработки

Да, бесспорно, алиасы можно без AS, но все таки нужно объявлять. К примеру
Код
select * from (select code from table)

работать не будет, а вот такой
Код
select * from (select code from table) a
- будет
Но вот с чего все решили, что именно о MySQL речь идет? smile.gif




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных