SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.09.2009 13:15:44

studsql
Участник
Зарегистрирован: 26.09.2009
Сообщений: 1

Помогите написать пару запросов.

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

1. Отобразить номер(а)б названия отдела(ов), в которых работает наибольшее число сотрудников среди всех отделов. В третьем столбце расчитать процент сотрудников от общего числа работников.


select отдел.номер_отдела, отдел.name, aaa*100/
(select counts(*) from сотрудник)
from отдел, сотрудник, select counts(сотрудник.номер_отдела))
from сотрудник ааа
where aaa=(select max(count(сотрудник.номер_отдела)) from сотрудник) and сотрудник.номер_отдела=отдел.номер_отдела
 


2. Вывести название стран, в которых наименьшее число клиентов с "хорошим" кредитным рейтингом. Второй столбец озаглавить "Количество клиентов".


select  клиент.страна, count (клиент.id) as "количество клиентов"
from клиент
where count(клиент.id)=(select count(клиент.id)
from клиент
where кредитный_рейтинг like "хороший");

 
3. Расчитать процент от общего числа заказов,  в которых дата заказа и дата доставки были в один и тот же месяц.

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


select номер_отдела from сотрудник, count(зарплата + комиссионные)
  where комиссионные >=1
 

5. Расчитать количество клиентов для отделов, в которых работают однофамильцы. Вывести номер отдела и полученное количество в одном столбце через знак "дефис".


select номер_отдела, count(фамилия) from сотрудник
where  сотрудник in
(select фамилия from сотрудник
group by фамилия having count(*)>1);

Отредактированно studsql (26.09.2009 13:17:47)

Неактивен

 

#2 28.09.2009 08:15:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите написать пару запросов.

Длz начала вам нужно обратить внимание на синтаксис оператора SELECT. Он имеет следующий вид:

SELECT перечисление_выбираемых_полей FROM перечисление_таблиц WHERE .. GROUP BY .. HAVING .. ORDER BY .. LIMIT..;

Порядок следования в нем жестко задан именно таким образом и менять его нельзя. Поэтому, например, ваш запрос

SELECT номер_отдела FROM сотрудник, COUNT(зарплата + комиссионные)
  WHERE комиссионные >=1

является синтаксически неверным, так как выбираемое поле "COUNT(зарплата + комиссионные)" идет после ключевого слова FROM.

Подробнее синтаксис оператора SELECT можно посмотреть http://dev.mysql.com/doc/refman/5.1/en/select.html


Ваша первая задача имеет следующее решение:

select s.номер_отдела, o.name, count(*)*100/(select count(*) from таблица_сотрудников)
from таблица_сотрудников s join таблица_отделов o on s.номер_отдела=o.id
group by 1 having count(*)=(select count(*) from таблица_сотрудников group by номер_отдела order by 1 desc limit 1);



Вторая задача решается аналогично. Разница лишь в том, что ищется не наибольшее число сотрудников, а наименьшее число клиентов.


В третьей задаче используется условие MONTH(дата_заказа) = MONTH(дата_доставки)

4,5 Вообще в таких задачах желательно выкладывать структуру таблиц.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson