powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
12 сообщений из 12, страница 1 из 1
Помогите с запросом
    #32068559
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди, пишу такое:

select a.id, a.familia from (people a inner join udir b on a.familia=b.id);

В таблице people хранится id челоека и идентификатор фамилии. В таблице udir - id и сама фамилия, однако все равно возвращается циферное значение. Обясните почему и как вытащить текстовое (потому что кроме фамилии надо вытащить еще и имя, отчество и тд и тп)

Помогите плз. А то девушка моя заваливается в универе :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068567
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс, извиняюсь за вторжение. Я уже разобрался :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068569
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зато возникла другая проблема:
Создать запрос, возвращающий все имена из справочника и частоту их встречи
в базе, отсортировать по убыванию частоты и по возрастанию имени.

Вот как мне подсчитать частоту их встречи
и отсортировать по убыванию частоты ??
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068577
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, наверно я у вас ту пропишусь, никто не возражает?
Ситуация такая:

Создать запрос, возвращающий ФИО покупателя и сумму, на которую
он приобрел автомобилей за последние 10 лет.

я пишу:
Код: plaintext
1.
select sum(f.price), b.dirvalue||' '|| c.dirvalue||' '||e.dirvalue from (people a inner join udir b on a.familia=b.id inner join udir c on a.name=c.id inner join udir e on a.otchestvo=e.id inner join client g on g.id_client=a.id inner join pokupka f on g.id_client=f.who);


вот структура используемых таблиц:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create table udir(
id integer not null constraint A primary key,
dirvalue varchar( 30 ) not null,
sty smallint not null constraint AA  references dir(id),  
unique(dirvalue,sty));


create table people(
id integer not null constraint H primary key,
familia integer not null constraint Q references udir(id) on update cascade on delete cascade,
name integer not null constraint S  references udir(id) on update cascade on delete cascade, 
otchestvo integer not null constraint X references udir(id) on update cascade on delete cascade,
sex integer not null constraint E references udir(id) on update cascade on delete cascade,
family_status integer not null constraint F references udir(id) on update cascade on delete cascade,
adress varchar( 20 ) not null,
pasport varchar( 20 ) not null unique,
birthday date not null,
unique(familia,name,otchestvo,birthday));


create table client (
id_client integer not null constraint TT references people(id) on update cascade on delete cascade unique,
status integer not null constraint QW references udir(id) on update cascade on delete cascade,
skidka numeric( 4 , 2 ) check (skidka between  0  and  30 ));
            
create table pokupka(
id smallint not null constraint Z references car(id),
data date not null,
shop_assistant integer not null constraint V references cleark(id_cleark) on update cascade on delete cascade,
who integer not null constraint I references client(id_client) on update cascade on delete cascade,
oplata integer  not null constraint U references udir(id) on update cascade on delete cascade,
price numeric( 10 , 2 ) not null check (price> 0 ));


На мой запрос он пишет следующее:

Dynamic SQL Error
-SQL error code = -104
-invalid column reference


Ну, акулы SQL, кто может мне помочь? :)
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068582
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сюда случайно заскочил.

Я не силен в диалекте для IB, но проверьте, у Вас udir идет и как "b", и как "с". Может быть дело в этом?
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068583
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, не в этом. Это точно.
Люди, может кто поможет? а то я за 3 часа только 3 несложных запроса сделал :) (сложно, когда видешь SQL впервые).

Я бы по емайлу выслал БД и задания. А Вы мне в ответ - готовые запросы:) Взамен предлагаю посильную помощь в php, perl, Flash и др. Могу чтонибудь нарисовать в фотошопе.
В общем, думаю договримся.

Кстате, могу за это отплатить баннерными показами (никому не надо 10 000 PBS или TBN ? )
Вобщем люди, помогите! в долгу не останусь. Пишите мне на мыло: dumb@pisem.net

Завтра прочту, сегодня уж спасть пора, а то у меня время уже 04:38.

Жду писем. avl.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068650
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди. Помгите плз. надо написать 27 запросов.

Я не имею ни малейшего представления как их делать. Если никто не хочет помагать бескорыстно - отплачу баннерными показами. (в данный момент имею 40 000 TBN и PBS. отдаю все).

Запросы не сложные, главное хорошо знать inner join.

пишите на мыло - [email=]dumb@pisem.net


avlnkz.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068664
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Конечно твой запрос не работает. Как же можно в одной строке выводить результат агрегатной функции и обычные поля без группировки ?????
Пробуй такое:
SELECT SUM(F.PRICE),B.DIRVALUE||' '||C.DIRVALUE||' '||E.DIRVALUE
FROM PEOPLE A
INNER JOIN UDIR B ON A.FAMILIA=B.ID
INNER JOIN UDIR C ON A.NAME=C.ID
INNER JOIN UDIR E ON A.OTCHESTVO=E.ID
INNER JOIN CLIENT G ON G.ID_CLIENT=A.ID
INNER JOIN POKUPKA F ON G.ID_CLIENT=F.WHO
GROUP BY B.DIRVALUE,C.DIRVALUE,E.DIRVALUE
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068665
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм. этот работает.

Ткните конкретно меня носом в ошибку (а то что-то не пойму).
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068670
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А где здесь ошибка? :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select a.name, a.address, b.dirvalue||' '||c.dirvalue||' '||d.dirvalue, n.number 
from (filial a
inner join cleark f on f.filial_1=a.id
inner join people g on g.id=f.id_people
inner join udir b on b.id=g.familia
inner join udir c on c.id=g.name
inner join udir d on d.id=g.otchestvo
inner join telephone n on n.teltype=d.id and d.dirvalue='Рабочий')
group by a.name, a.address
order by a.name;



В ответ пишется:

Dynamic SQL Error
-SQL error code = -104
-invalid column reference


Подскажите.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068674
avlnkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет Gold.

Вот пишу:

1. Структура всей БД:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
create table dir(
id integer not null primary key,
dirvalue varchar( 50 ) not null unique);

create table udir(
id integer not null constraint A primary key,
dirvalue varchar( 30 ) not null,
sty smallint not null constraint AA  references dir(id),  
unique(dirvalue,sty));

create table people(
id integer not null constraint H primary key,
familia integer not null constraint Q references udir(id) on update cascade on delete cascade,
name integer not null constraint S  references udir(id) on update cascade on delete cascade, 
otchestvo integer not null constraint X references udir(id) on update cascade on delete cascade,
sex integer not null constraint E references udir(id) on update cascade on delete cascade,
family_status integer not null constraint F references udir(id) on update cascade on delete cascade,
adress varchar( 20 ) not null,
pasport varchar( 20 ) not null unique,
birthday date not null,
unique(familia,name,otchestvo,birthday));

create table telephone(
id integer not null constraint DY  references people(id) on update cascade on delete cascade,
number varchar( 20 ) not null,
unique(number,id),
teltype integer not null constraint  RT  references udir(id) on update cascade on delete cascade);

create table car(
id smallint not null constraint AQ primary key,
techical_documentation  varchar( 50 ) not null,
model varchar( 15 ) not null,
proizvoditel smallint  not null constraint SW references udir(id) on update cascade on delete cascade,
Unique (model,proizvoditel,techical_documentation),
cost  numeric( 10 , 2 ) not null check (cost> 0 ),
car_count smallint not null);

create table filial (
id  smallint not null constraint M  primary key,
name varchar( 20 ) not null constraint WW unique,                     
address varchar( 30 ) not null);

create table cleark (
id_cleark smallint not null constraint J primary key,
id_people integer not null constraint K references people(id) on update cascade on delete cascade,
welcome date not null,
filial_1 smallint not null  constraint T references filial(id) on update cascade on delete cascade,
dolgnost integer not null constraint SA references udir(id) on update cascade on delete cascade,
pay numeric( 10 , 2 ) not null check(pay> 0 ),
unique(id_people,dolgnost));

create table client (
id_client integer not null constraint TT references people(id) on update cascade on delete cascade unique,
status integer not null constraint QW references udir(id) on update cascade on delete cascade,
skidka numeric( 4 , 2 ) check (skidka between  0  and  30 ));
            
create table pokupka(
id smallint not null constraint Z references car(id),
data date not null,
shop_assistant integer not null constraint V references cleark(id_cleark) on update cascade on delete cascade,
who integer not null constraint I references client(id_client) on update cascade on delete cascade,
oplata integer  not null constraint U references udir(id) on update cascade on delete cascade,
price numeric( 10 , 2 ) not null check (price> 0 ));
               
Insert into Dir values ( 1 , 'Имя');
Insert into Dir values ( 2 , 'Отчество');
Insert into Dir values ( 3 , 'Фамилия');
Insert into Dir values ( 4 , 'Семейное положение');
Insert into Dir values ( 5 , 'Должность');
Insert into Dir values ( 6 , 'Вид оплаты');
Insert into Dir values ( 7 , 'Пол');
Insert into Dir values ( 8 , 'Телефон');
Insert into dir values ( 9 ,'Производитель');
Insert into dir values ( 10 ,'Статус');

Insert into udir values ( 1 , 'Юля',  1 ); 
Insert into Udir values ( 2 , 'Андрей',  1 ); 
Insert into Udir values ( 3 , 'Татьяна',  1 ); 
Insert into Udir values ( 4 , 'Вадим',  1 ); 
Insert into Udir values ( 5 , 'Ирина',  1 ); 
Insert into Udir values ( 6 , 'Сергеевна',  2 ); 
Insert into Udir values ( 7 , 'Федорович',  2 ); 
Insert into Udir values ( 8 , 'Анатольевч',  2 ); 
Insert into Udir values ( 9 , 'Петрович',  2 ); 
Insert into Udir values ( 10 , 'Гуляева',  3 ); 
Insert into Udir values ( 11 , 'Вичирко',  3 ); 
Insert into Udir values ( 12 , 'Афанасьев',  3 ); 
Insert into Udir values ( 13 , 'Сорокин',  3 ); 
Insert into Udir values ( 14 , 'Иващенко',  3 ); 
Insert into Udir values ( 15 , 'замужем',  4 ); 
Insert into Udir values ( 16 , 'не замужем',  4 ); 
Insert into Udir values ( 17 , 'женат',  4 ); 
Insert into Udir values ( 18 , 'холостой',  4 ); 
Insert into Udir values ( 19 , 'Директор',  5 );
Insert into Udir values ( 20 , 'Продавец',  5 ); 
Insert into Udir values ( 21 , 'Товаровед',  5 ); 
Insert into Udir values ( 22 , 'Наличные',  6 ); 
Insert into Udir values ( 23 , 'Кредит',  6 );
Insert into Udir values ( 24 , 'М',  7 ); 
Insert into Udir values ( 25 , 'Ж',  7 ); 
Insert into Udir values ( 26 , 'Домашний',  8 );
Insert into Udir values ( 27 , 'Рабочий',  8 );
Insert into Udir values ( 28 , 'Мобильный',  8 );
Insert into Udir values ( 29 , 'Россия', 9 );
Insert into Udir values ( 30 , 'Германия', 9 );
Insert into Udir values ( 31 , 'Швецария', 9 );
Insert into Udir values ( 32 , 'Канада', 9 );
Insert into Udir values ( 33 , 'Активный', 10 );
Insert into Udir values ( 34 , 'Постоянный', 10 );
Insert into Udir values ( 35 , 'Пассивный', 10 );

Insert into People values( 1 , 10 , 1 , 6 , 25 , 16 ,'Шункова3-29', 12345 ,'26.11.1973');
Insert into People values( 2 , 12 , 4 , 7 , 24 , 17 ,'Вокзальная9-14', 41563 ,'11.03.1975');
Insert into People values( 3 , 13 , 2 , 8 , 24 , 18 ,'Сердлова16-89', 56783 ,'23.02.1976');
Insert into People values( 4 , 11 , 5 , 6 , 25 , 15 ,'Бардина27-4', 42315 ,'07.09.1973');
Insert into People values( 5 , 14 , 3 , 6 , 25 , 16 ,'Сеченова12-78', 34521 ,'01.01.1975');

insert into telephone values( 1 ,'376365', 26 );
insert into telephone values( 1 ,'543211', 27 );
insert into telephone values( 1 ,'89039084825', 28 );
insert into telephone values( 3 ,'452378', 26 );
insert into telephone values( 2 ,'471267', 26 );
insert into telephone values( 2 ,'546532', 27 );
insert into telephone values( 2 ,'89039096534', 28 );

insert into car values ( 1 , 1500 ,'ВАЗ-21099', 29 , 180000 , 3 );
insert into car values ( 2 , 2200 ,'Crouvn', 30 , 300000 , 1 );
insert into car values ( 3 , 2000 ,'Toyota', 31 , 220000 , 2 );

insert into filial values ( 1 ,'Самурай','Ленина42');
insert into filial values ( 2 ,'ВАЗ','Курбатова1');
insert into filial values ( 3 ,'Властелин колес','Металлургов12');
insert into filial values ( 4 ,'Колесо','Бардина9');

insert into cleark values ( 1 , 2 ,'01.03.1998', 2 , 19 , 30000  );
insert into cleark values ( 2 , 4 ,'01.05.1998', 3 , 21 , 7000  );
insert into cleark values ( 3 , 5 ,'01.08.1999', 4 , 20 , 10000  );

insert into client values( 1 , 33 , 5 );
insert into client values( 2 , 35 , 0 );

insert into pokupka values ( 1 ,'11.10.2000', 1 , 1 , 23 , 180000 );
insert into pokupka values ( 2 ,'03.02.1999', 2 , 1 , 22 , 300000 );
insert into pokupka values ( 3 ,'18.08.99', 3 , 2 , 22 , 220000 );
  
commit;


2. Необходимы следующие запросы (к некоторым добавляю свои каракули, т.к. чую что они неправильны):


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
 4 . Создать запрос, возвращающий все имена из справочника и частоту их встречи 
в базе, отсортировать по убыванию частоты и по возрастанию имени.

select udir.dirvalue, count(udir.dirvalue) from udir where udir.sty= 1  group by udir.dirvalue order by udir.dirvalue;

Все работает, вот только я не понял про сортировку.

 10 . Создать запрос, возвращающий производителя автомобиля и долю его в процентах
(по количетсву) за последние  10  лет, отсортировать по производителю.

select c.dirvalue, count(b.id)* 100 /sum(e.id)
from (car a
inner join udir c on a.proizvoditel=c.id
inner join pokupka b on b.id=a.id
inner join pokupka e on e.data> '01.11.92'
)
group by c.dirvalue
order by c.dirvalue;

С процентами напутано что-то у меня....или нет????


 11 . Создать запрос, возвращающий производителя автомобиля 
и прибыльность продаж его автомобилей за последние  10  лет, 
отсортировать по прибыльности.

select a.dirvalue, sum(b.price-c.cost)
from (udir a 
inner join car c on a.id=c.proizvoditel 
inner join pokupka b on b.id=c.id and b.data >'01.11.92') 
group by a.dirvalue 
order by  2 ;

И опять же - чего я с  "прибыльностью"  наделал - незнаю!

 12 . Создать запрос, возвращающий производителя автомобиля 
и долю продаж его автомобилей в процентах (по прибыли)
за последние  10  лет, отсортировать по производителю.


select a.dirvalue, sum(b.price-c.cost)/ 100  
from (udir a 
inner join car c on a.id=c.proizvoditel 
inner join pokupka b on b.id=c.id and b.data >'01.11.92') 
group by a.dirvalue 
order by  2 ;


Или все правильно, или я уже спать хочу :)

 14 .Создать запрос, рассчитывающий долю (в процентах) мужчин
и женщин среди покупателей компании.

select a.dirvalue, count(a.dirvalue)* 100 /sum(b.id)
from (pokupka b
inner join client c on c.id_client=b.who
inner join people d on c.id_client=d.id
inner join udir a on d.sex=a.id)
group by a.dirvalue;

и снова я не уверен насчет процентов....


 16 .Создать запрос, возвращающий ФИО и категорию. Категория - это должность
(для сотрудника комании) либо значение 'покупатель' (для покупателя).
Отсортировать по категории и ФИО. 

 17 . Создать запрос, возвращающий ФИО и для сотрудника компании должность.
Отсортировать по дате рождения.


Посмотри, пожалуйста. Жду ответа.

Антон.
...
Рейтинг: 0 / 0
Помогите с запросом
    #32068983
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4. SELECT DIRVALUE,COUNT(*)
FROM UDIR WHERE STY=1
GROUP BY DIRVALUE
ORDER BY 2 DESC,DIRVALUE ASC

10. Наверное напутано, т.к. что за сумма там у тебя - не пойму. Вроеде, надо делить кол-во машин данной марки на кол-во всех. Кол-во всех надо подсчитать заранее и подставить зачение при вычислени процента.

11. Вроде нормально.

12. Та же глупость с процентами. Сначала считай отдельным запросом sum(b.price-c.cost) для всех машин, а потом подставляй это в свой запрос в знаменатель.

14. Меня поражает деление на sum(b.id). Это сумма чего и зачем ??? :-). Вычислять это одним запросом ну совсем нехорошо. Подсчитай отдельно кол-во Ж и М и дели эти кол-ва на их сумму. Можешь оформить в виде ХП. Если это лишь бы работало, попробуй подзапрос:
SELECT A.DIRVALUE, COUNT(A.DIRVALUE)*100/
(SELECT COUNT(*) FROM POKUPKA)
FROM POKUPKA B
INNER JOIN CLIENT C ON C.ID_CLIENT=B.WHO
INNER JOIN PEOPLE D ON C.ID_CLIENT=D.ID
INNER JOIN UDIR A ON D.SEX=A.ID
GROUP BY A.DIRVALUE;
В общем, вместо подзапроса нужно подставить число.

16. Я не знаю, где кто у тебя находится. Если в разных таблицах - используй запрос с UNION.

17. То же, что и выше. Например:
SELECT SURNAME||' '||NAME||' '||PATRONYMIC AS FIO, 'ПОКУПАТЕЛЬ' AS POST
FROM CUSTOMERS
UNION ALL
SELECT SURNAME||' '||NAME||' '||PATRONYMIC AS FIO,
(SELECT NAME FROM POSTS P WHERE P.ID=E.POST) AS POST
FROM EMPLOYEES E
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]