Select sum(string field) ....
8 отговора
859 прегледа
Select sum(string field) ....
Знае ли някой как да "сумирам" стрингово поле ?
Например в таблица имам следното :
1 софия
2 варна
1 русе
заявката трябва да върне
1 софия русе
2 варна
базата е Firebird 1.5.2
Знам, че в Yaffil има такава ф-я - LIST(string field), но не ми се сменя сървъра.
Например в таблица имам следното :
1 софия
2 варна
1 русе
заявката трябва да върне
1 софия русе
2 варна
базата е Firebird 1.5.2
Знам, че в Yaffil има такава ф-я - LIST(string field), но не ми се сменя сървъра.
Re: Select sum(string field) ....
Съхранена процедура
Напр. ако имаш
При select * from LIST ще получиш
Напр. ако имаш
CREATE TABLE T1 (
ID INTEGER,
STRINGFIELD VARCHAR(1024)
);
INSERT INTO T1 (ID, STRINGFIELD) VALUES (1, 'софия ');
INSERT INTO T1 (ID, STRINGFIELD) VALUES (2, 'варна ');
INSERT INTO T1 (ID, STRINGFIELD) VALUES (1, 'русе ');
CREATE PROCEDURE LIST
RETURNS (
ID INTEGER,
STRINGFIELD VARCHAR(1024))
AS
DECLARE VARIABLE TMP VARCHAR(1024);
begin
/* Procedure Text */
For select distinct ID from T1 into :ID
do begin
STRINGFIELD='';
FOR select STRINGFIELD from T1 where ID=:ID into :TMP
do STRINGFIELD=:TMP||' '||:STRINGFIELD;
suspend;
end
end
^
При select * from LIST ще получиш
ID STRINGFIELD
1 русе софия
2 варна
Re: Дано да не се приеме като заяждане
В MySQL има агрегатна функция за целта
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
salle.online.bg/sig
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
salle.online.bg/sig
Редактирано от salle на
Re: Select sum(string field) ....
Благодаря !
В момента го правя с една постоянна и една memory table, която зареждам програмно и после използувам за lookup поле.
Понеже таблиците са малки и се инсертва/ъпдейтва паралелно в двете, не се забелязва разлика в бързодействието в сравнение със stored procedurata, дори с memory table e малко по-бързичко.
Предполагам, че за големи таблици със stored procedurata ще е доста по-добре.
В момента го правя с една постоянна и една memory table, която зареждам програмно и после използувам за lookup поле.
Понеже таблиците са малки и се инсертва/ъпдейтва паралелно в двете, не се забелязва разлика в бързодействието в сравнение със stored procedurata, дори с memory table e малко по-бързичко.
Предполагам, че за големи таблици със stored procedurata ще е доста по-добре.
Re: Дано да не се приеме като заяждане
salle,ако не е проблем може ли да напишеш цялата заявка за да видя как става?
Мерси предварително!
Мерси предварително!
Re: Ети ти един пример с примерната БД World
mysql> SELECT c1.Name, GROUP_CONCAT(c2.Name) AS City_List FROM Country AS c1, City AS c2 WHERE c1.Code=c2.CountryCode AND c1.Name LIKE 'Bu%' GROUP BY c1.Code LIMIT 10;
+--------------+---------------------------------------------------------------------+
| Name | City_List |
+--------------+---------------------------------------------------------------------+
| Burundi | Bujumbura |
| Burkina Faso | Ouagadougou,Bobo-Dioulasso,Koudougou |
| Bulgaria | Sofija,Plovdiv,Varna,Burgas,Ruse,Stara Zagora,Pleven,Sliven,Dobric, |
+--------------+---------------------------------------------------------------------+
mysql> SELECT c1.Name, GROUP_CONCAT(c2.Name ORDER BY c2.Name SEPARATOR '; ') AS City_List FROM Country AS c1, City AS c2 WHERE c1.Code=c2.CountryCode AND c1.Name LIKE 'Bu%' GROUP BY c1.Code LIMIT 10;
+--------------+----------------------------------------------------------------------------+
| Name | City_List |
+--------------+----------------------------------------------------------------------------+
| Burundi | Bujumbura |
| Burkina Faso | Bobo-Dioulasso; Koudougou; Ouagadougou |
| Bulgaria | Burgas; Dobric; Pleven; Plovdiv; Ruse; Sliven; Sofija; Stara Zagora; Varna |
+--------------+----------------------------------------------------------------------------+
salle.online.bg/sig
+--------------+---------------------------------------------------------------------+
| Name | City_List |
+--------------+---------------------------------------------------------------------+
| Burundi | Bujumbura |
| Burkina Faso | Ouagadougou,Bobo-Dioulasso,Koudougou |
| Bulgaria | Sofija,Plovdiv,Varna,Burgas,Ruse,Stara Zagora,Pleven,Sliven,Dobric, |
+--------------+---------------------------------------------------------------------+
mysql> SELECT c1.Name, GROUP_CONCAT(c2.Name ORDER BY c2.Name SEPARATOR '; ') AS City_List FROM Country AS c1, City AS c2 WHERE c1.Code=c2.CountryCode AND c1.Name LIKE 'Bu%' GROUP BY c1.Code LIMIT 10;
+--------------+----------------------------------------------------------------------------+
| Name | City_List |
+--------------+----------------------------------------------------------------------------+
| Burundi | Bujumbura |
| Burkina Faso | Bobo-Dioulasso; Koudougou; Ouagadougou |
| Bulgaria | Burgas; Dobric; Pleven; Plovdiv; Ruse; Sliven; Sofija; Stara Zagora; Varna |
+--------------+----------------------------------------------------------------------------+
salle.online.bg/sig
Редактирано от salle на
Re: Ети ти един пример с примерната БД World
хехехе :) офф топик, ма как па точно тея градове фана баси :)
искам да живея в оуагадоугоу, може и в бужумбура де :)
искам да живея в оуагадоугоу, може и в бужумбура де :)
Re: Ами случайно :)
Когато бях ученик Уагадугу ми беше една от любимите столици на картата на света.
Тогава обаче държавата се казваше Горна Волта.
salle.online.bg/sig
Тогава обаче държавата се казваше Горна Волта.
salle.online.bg/sig
Re: Между другото ...
Навремето като я добавхмe тази функция аз поддържах идеята, че за разделител по подразбиране трябва да се използва интервал. Обаче се оказах малцинство.
Доколкото помня всички бяха единодушни, че без ORDER BY клаузата е подобна функция е доста безсмислена.
salle.online.bg/sig
Доколкото помня всички бяха единодушни, че без ORDER BY клаузата е подобна функция е доста безсмислена.
salle.online.bg/sig