Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

Сложный SQL для статистики   Найти похожие ветки 

 
КиТаЯц ©   (2005-05-12 12:05) [0]

Постараюсь объяснить на примере... Есть такой запрос:
SELECT
COLL.ID_PEOPLE,
SUM (COLL.PLATA) AS SUMMA,
SUM (COLL1.PLATA) AS SUMMA1
FROM
COLL COLL1
WHERE
COLL.TIP = 1 or COLL.TIP = 2
GROUP BY COLL.ID_PEOPLE


Получается статистика по людям кто сколько заплатил по типу 1 + 2
Получается что-то вроде:

Иванов  20р 20р
Петров  10р 10р
Сидоров 15р 15р

Почему 2 поля? Чтобы задать вопрос... Далее пишу бред (бред выделен полужирным) для того чтобы получилось вопрос сформулировать...

SELECT
COLL.ID_PEOPLE,
SUM (COLL.PLATA) AS SUMMA WHERE COLL.TIP = 1,
SUM (COLL1.PLATA) AS SUMMA1 WHERE COLL.TIP = 2
FROM
COLL COLL1
WHERE
...
GROUP BY COLL.ID_PEOPLE


Вопрос: как составить запрос чтобы в результате получилось:

Иванов   7р 13р
Петров   4р  6р
Сидоров 15р  0р


 
Johnmen ©   (2005-05-12 12:10) [1]

SELECT
T.ID_PEOPLE,
(SELECT SUM (T1.PLATA) FROM COLL T1
 WHERE (T.ID_PEOPLE=T1.ID_PEOPLE) AND (T1.TIP = 1)) AS SUMMA,
(SELECT SUM (T2.PLATA) FROM COLL T2
 WHERE (T.ID_PEOPLE=T2.ID_PEOPLE) AND (T2.TIP = 2)) AS SUMMA,
FROM COLL T
WHERE
...
GROUP BY T.ID_PEOPLE


Но если TIP вполне определен, то можно проще...


 
msguns ©   (2005-05-12 12:13) [2]

Для таких вещей лучше ХП ИМХО


 
Johnmen ©   (2005-05-12 12:18) [3]

Кстати, у автора же FB. Тогда проще
SELECT
T.ID_PEOPLE,
SUM (CASE WHEN T.TIP = 1 THEN T.PLATA ELSE 0 END),
SUM (CASE WHEN T.TIP = 2 THEN T.PLATA ELSE 0 END),
FROM COLL T
WHERE
...
GROUP BY T.ID_PEOPLE


 
КиТаЯц ©   (2005-05-12 12:28) [4]

Хм... Вроде логика запроса понятна. Но...
В первом случае EMS QuickDesk виснет напроч, а во втором ругается:

SQLEditorForm.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 11.

Может FireBird 1.0 ???


 
Johnmen ©   (2005-05-12 12:36) [5]

>виснет напроч

Сколько записей в тбл ? Есть ли индексы ?

>Может FireBird 1.0 ???

Может...


 
Sergey13 ©   (2005-05-12 12:46) [6]

2 [4] КиТаЯц ©   (12.05.05 12:28)
>В первом случае EMS QuickDesk виснет напроч
там Group By вроде лишний. Нет?


 
КиТаЯц ©   (2005-05-12 13:10) [7]

> Johnmen ©   (12.05.05 12:36) [5]

Да. FireBird 1.5 прожевал :) В общем куда дальше думать понятно. Спасибо.

> Sergey13 ©   (12.05.05 12:46) [6]

Вроде не... Разберусь. Спасибо.


 
Fiend ©   (2005-05-12 15:54) [8]

А можно еще проще и быстрее по времени


 
КиТаЯц ©   (2005-05-13 07:25) [9]

Я так понял, что GROUP BY + ORDER BY в FireBird 1.5 уже не работают? Что делать?
Я выкрутился через вьюшку (во вьюшке GROUP BY, а в tIBQuery - ORDER BY). Есть способ лучше?
Спасибо.


 
sniknik ©   (2005-05-13 08:56) [10]

> Я так понял, что GROUP BY + ORDER BY в FireBird 1.5 уже не работают?
с чего бы? при развитии обычно добавляют возможности а не урезают их
возможно дело в коде (которого кстати не вижу чегото)?

возможно даже вот это поможет ORDER BY 1


 
КиТаЯц ©   (2005-05-13 09:12) [11]

> sniknik ©   (13.05.05 08:56) [10]
Ёх! Все гениальное просто! :) Спасибо.
ORDER BY +НОМЕР ПОЛЯ работает!


 
Johnmen ©   (2005-05-13 09:25) [12]

>ORDER BY +НОМЕР ПОЛЯ работает!

А чего бы ему не работать, если это стандарт. Базовый стандарт 1989 года. :)))


 
КиТаЯц ©   (2005-05-13 09:35) [13]

> Johnmen ©   (13.05.05 09:25) [12]

Дассс... :) Дыры в образовании. Пиво пить меньше надо было. :)))



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.042 c
3-1116333262
kyn66
2005-05-17 16:34
2005.06.29
Как переименовать столбец или таблицу Access?


4-1115284450
ANB
2005-05-05 13:14
2005.06.29
Каким глобальным хуком можно перехватить свое сообщение


3-1116062350
yk
2005-05-14 13:19
2005.06.29
violation of FOREIGN KEY constraint


14-1117257328
boriskb
2005-05-28 09:15
2005.06.29
Как молодежь коверкает наш язык :)


1-1117782191
BigBan
2005-06-03 11:03
2005.06.29
Операции со строками





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский