| 
			| 
					
						| McZim | 
								|  | « Ответ #180 : 10-12-2010 11:04 »  |  | 
 
 Dana, неправильно. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #181 : 22-12-2010 10:32 »  |  | 
 
 У меня горе. Нам сервер оракла снесли и все мои лабораторки умерли (( все желание отбили..блин...как так можно..хоть бы предупредили. В общем я пока в шоке   |  
						| 
								|  |  
								|  |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #182 : 22-12-2010 11:02 »  |  | 
 
 Dana, а ты чего не сохраняла исходники? Всмысле те sql запросы, которые ты делала, ты не сохранила у себя локальную копию? |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #183 : 22-12-2010 11:05 »  |  | 
 
 было бы чего переживать. На каждый винт есть гайка.http://www.sql-ex.ru/ Это чтоб ты не потеряла навыки (правда придется забыть об нотации оракла) |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #184 :  23-12-2010 04:36 »   |  | 
 
 Понадеялась на учебный сервер. Думала там же учителя - умные люди, ничего не случится. Ну и на тебе. Сейчас Оракл подняли но нет ни одного запроса.Добавлено через 6 дней, 5 часов, 44 минуты и 47 секунд: 1. Найти клиента, зарегистрировавшегося последним SELECT (MAX(computation.n_client)), C_FIRST_NAME, C_SECOND_NAME, C_LAST_NAME, client.n_city,computation.n_debt,computation.d_computationFROM client, computation, city
 WHERE client.n_client=computation.n_client
 AND client.n_city=city.n_city
 оракл выдает    ORA-00937: not a single-group group function Что это значит? |  
						| 
								|  |  
								| « Последнее редактирование: 29-12-2010 10:21 от Dana » |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #185 : 29-12-2010 10:17 »  |  | 
 
 Dana, ты использовала max на одном из полей. Тебе нужно остальные поля сгруппировать. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #186 : 29-12-2010 10:20 »  |  | 
 
 У тебя max выдает одно единственное значение, а все остальные поля будут давать множество значений. Групировать также нельзя.  Значит нужно делать два подзапроса. Первый будет искать максимальное значение и на основе этого запроса уже искать данные по клиенту. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #187 : 29-12-2010 10:21 »  |  | 
 
 Групировать также нельзя.
 всмысле? |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #188 : 29-12-2010 10:23 »  |  | 
 
 Все остальные поля зависят напрямую, что вычислит функция max. Что то мне не приходит на ум, по чему можно сгрупировать. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #189 : 29-12-2010 10:31 »  |  | 
 
 Finch, мы видимо немного не о том? WITH t AS(
 SELECT 1 AS num, 'a' AS nm FROM dual UNION ALL
 SELECT 2, 'a' FROM dual UNION ALL
 SELECT 3, 'a' FROM dual UNION ALL
 SELECT 2, 'b' FROM dual UNION ALL
 SELECT 0, 'b' FROM dual
 )
 SELECT MAX(num), nm
 FROM t
 GROUP BY nm
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #190 : 29-12-2010 10:34 »  |  | 
 
 McZim, покажи эту конструкцию на примере вышеприведенного Даной. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| Sla | 
								|  | « Ответ #191 : 29-12-2010 10:41 »  |  | 
 
 SELECT (MAX(computation.n_client)), C_FIRST_NAME, C_SECOND_NAME, C_LAST_NAME, client.n_city,computation.n_debt,computation.d_computationFROM client, computation, city
 WHERE client.n_client=computation.n_client
 AND client.n_city=city.n_city
 group by C_FIRST_NAME, C_SECOND_NAME, C_LAST_NAME, client.n_city,computation.n_debt,computation.d_computation
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Мы все учились понемногу... Чему-нибудь и как-нибудь. |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #192 : 29-12-2010 11:07 »  |  | 
 
 Finch, пока писал, понял что не вник в задание, ты прав. CREATE TABLE t_client(n_client NUMBER, C_FIRST_NAME varchar2(256), C_SECOND_NAME varchar2(256), C_LAST_NAME varchar2(256), n_city NUMBER)CREATE TABLE t_computation(n_client NUMBER,n_debt NUMBER,d_computation NUMBER)
 CREATE TABLE t_city(n_city NUMBER)
 
 INSERT INTO t_client VALUES(1,'Maxim', 'Filatov', 'aaa', 100)
 INSERT INTO t_client VALUES(2,'Anna', 'Filatova', 'bbb', 100)
 INSERT INTO t_client VALUES(3,'Timofey', 'Filatov', 'ccc', 100)
 
 INSERT INTO t_computation VALUES(1,20,30)
 INSERT INTO t_computation VALUES(2,30,30)
 INSERT INTO t_computation VALUES(3,40,30)
 
 INSERT INTO t_city VALUES(100)
 
 SELECT cl.C_FIRST_NAME, cl.C_SECOND_NAME, cl.C_LAST_NAME, cl.n_city,cm.n_debt, cm.d_computation
 FROM t_client cl, t_computation cm
 WHERE cl.n_client = cm.n_client
 AND cl.n_client IN (SELECT MAX(n_client) FROM t_client)
 AND cl.n_city IN (SELECT ct.n_city FROM t_city ct)
 Timofey	Filatov	ccc	100	40	30
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #193 : 29-12-2010 11:14 »  |  | 
 
 SELECT *FROM client
 WHERE n_client =
 (SELECT max(n_client)
 FROM computation)
 
 AND computation.n_client=client.n_client)  -стоит писать или нет
 |  
						| 
								|  |  
								| « Последнее редактирование: 29-12-2010 11:18 от Dana » |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #194 : 29-12-2010 11:15 »  |  | 
 
 Наверно можно сделать чуть проше. Правда я не знаю, как Oracle смотрит на LIMIT SELECT computation.n_client, C_FIRST_NAME, C_SECOND_NAME, C_LAST_NAME, client.n_city,computation.n_debt,computation.d_computationFROM client, computation, city
 WHERE client.n_client=computation.n_client
 AND client.n_city=city.n_city
 ORDER BY  computation.n_client DESC
 LIMIT 1;
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #195 : 29-12-2010 11:22 »  |  | 
 
 Finch, вместо LIMIT в Oracle используют ROWNUM <= 1.
 Но, я специально вынес, внутреннее соединение с city в подзапрос, в интерпретации Oracle, нужно так делать, за исключением некоторых случаев, так как Cost Based Optimizator, может применять лучшие планы выполнения запроса в зависимости от размеров таблиц!
 
 И все же лучше применить аналитический max чем сортировку!
 |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #196 : 29-12-2010 11:22 »  |  | 
 
 Наверно можно сделать чуть проше. Правда я не знаю, как Oracle смотрит на LIMIT SELECT computation.n_client, C_FIRST_NAME, C_SECOND_NAME, C_LAST_NAME, client.n_city,computation.n_debt,computation.d_computationFROM client, computation, city
 WHERE client.n_client=computation.n_client
 AND client.n_city=city.n_city
 ORDER BY  computation.n_client DESC
 LIMIT 1;
мне найдо найти последнего зарегистрировавшегося, а в этом запросе я его не вижу |  
						| 
								|  |  
								|  |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #197 : 29-12-2010 11:23 »  |  | 
 
 Dana, В твоем коде нужно применять псевдонимы. Иначе ты не сможеш воспользоваться результатоом подзапроса. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #198 : 29-12-2010 11:23 »  |  | 
 
 мне найдо найти последнего зарегистрировавшегося, а в этом запросе я его не вижу
 а ты по внимательней посмотри, он там затаился   |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #199 : 29-12-2010 11:26 »  |  | 
 
 Dana, Я сортирую computation.n_client по нисходяшей. Тогда получается что самый наибольшее значение, т.е. максимальное выскочит наверх. А потом только остается его показать в качестве результата. Что и делает LINIT ( ROWNUM <= 1). Если n_client является проиндексированным полем, тогда должно вроде как работать быстро. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #200 : 29-12-2010 11:27 »  |  | 
 
 SELECT computation.n_client, C_FIRST_NAME, C_SECOND_NAME, C_LAST_NAME, client.n_city,computation.n_debt,computation.d_computationFROM client, computation, city
 WHERE client.n_client=computation.n_client
 AND client.n_city=city.n_city
 ORDER BY  computation.n_client DESC
 ROWNUM <= 1
 
 Оракл говорит что
 
 ORA-00933: SQL command not properly ended
 
 Но это так.
 
 McZim, а затаился он наверно тут
 ORDER BY  computation.n_client DESC
 LIMIT 1;
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #201 : 29-12-2010 11:31 »  |  | 
 
 Dana, В твоем коде нужно применять псевдонимы. Иначе ты не сможеш воспользоваться результатоом подзапроса.
 SELECT * FROM client cl WHERE n_client =  (SELECT max(n_client)  FROM computation com) AND com.n_client=cl.n_client |  
						| 
								|  |  
								|  |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #202 : 29-12-2010 11:32 »  |  | 
 
 А понял    Не обратил внимание. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #203 : 29-12-2010 11:35 »  |  | 
 
 2/ 2.   Посчитать сумму долга клиента Александра Иванова за январь, февраль, март и апрель 2008 года Думаю...   Надо вывести ссумму долга, но сначала найти Александра Иванова |  
						| 
								|  |  
								| « Последнее редактирование: 29-12-2010 11:46 от Dana » |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #204 : 29-12-2010 11:52 »  |  | 
 
 Это можно сделать в одном запросе. Я точно не знаю, как у тебя построена таблица. Но надеюсь, что таблица с записью долга у тебя выглядит примерно так. ID, Id_Client, Дата, Сумма.  |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #205 : 29-12-2010 12:08 »  |  | 
 
 select sum(n_debt)From computation com
 where n_debt=
 (select *
 from client cl
 where upper (cl.c_first_name) like upper ('александр') and upper (cl.c_last_name) like upper ('иванов'))
 
 ORA
 
 
 ORA-00913: too many values
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| McZim | 
								|  | « Ответ #206 : 29-12-2010 12:13 »  |  | 
 
 Dana, Я сортирую computation.n_client по нисходяшей. Тогда получается что самый наибольшее значение, т.е. максимальное выскочит наверх. А потом только остается его показать в качестве результата. Что и делает LINIT ( ROWNUM <= 1). Если n_client является проиндексированным полем, тогда должно вроде как работать быстро.
 Дело больше в методе доступа, а не в простом измерении времени отклика. В данном случае не стоит это обсуждать. |  
						| 
								|  |  
								|  |  Записан | 
 
 The CBO without stats is like a morning without coffee. (c) T.Kyte. |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #207 : 29-12-2010 12:18 »  |  | 
 
 Dana, А зачем два запроса? Это можно свести в один запрос. И кстати, он у тебя правильно ругается. Ты  одно поле пытаешся сравнить с целой записью. И кстати почему n_debt? |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| Dana | 
								|  | « Ответ #208 : 12-01-2011 06:47 »  |  | 
 
 Dana, А зачем два запроса? Это можно свести в один запрос. И кстати, он у тебя правильно ругается. Ты  одно поле пытаешся сравнить с целой записью. И кстати почему n_debt?
 n_debt долг на начало периода, поэтому его и беру. В одном запросе примерно так будет: select n_debt from client cl, computation com where upper (cl.c_first_name) like upper ('александр') and upper (cl.c_last_name) like upper ('иванов'), но мне то нужна сумма долга за 4 месяца (ян февр мар апрель) вот и думаю как так сделатьДобавлено через 1 час, 40 минут и 41 секунду:  Select sum(pa.n_sum)from client cl,payment pa, computation com
 where upper (cl.c_first_name) like upper ('александр') and upper (cl.c_last_name) like upper ('иванов')and
 cl.n_client = pa.n_client and
 pa.n_client = com.n_client and
 to_char (com.d_computation, 'MONTH')='ФЕВРАЛЬ'and to_char (com.d_computation, 'MONTH')='МАРТ'and to_char (com.d_computation, 'MONTH')='АПРЕЛЬ'
Выдает -Добавлено через 5 дней, 22 часа, 20 минут и 32 секунды: help... |  
						| 
								|  |  
								| « Последнее редактирование: 18-01-2011 06:55 от Dana » |  Записан | 
 
 Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье? |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #209 : 18-01-2011 20:07 »  |  | 
 
 Dana, Извини, лениво искать по всей теме, как у тебя выглядят таблици. Можеш бросить их состав? Чтоб можно было помочь. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	|  |