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

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
McSimm2   (2003-07-09 11:34) [0]

Есть 2 таблицы. Как посчитать общее число записей в таблицах ?

Делаю вот так :

SELECT SUM ( QUERY.sum1 + QUERY.sum2) as AllSum
FROM (SELECT 0 AS sum1, COUNT (*) AS sum2
FROM (SELECT DISTINCT ulica, dom, kvart
FROM table1)
UNION
SELECT COUNT (*) AS sum1, 0 AS sum2
FROM (SELECT DISTINCT ulica, dom, kvart
FROM table2)) QUERY

Может как нить покороче можно ???


 
DenK_vrtz   (2003-07-09 11:43) [1]

А если так.
selct count(*) from
(
SELECT DISTINCT ulica, dom, kvart FROM table1
union all
SELECT DISTINCT ulica, dom, kvart FROM table2)


 
Johnmen   (2003-07-09 11:44) [2]

SELECT COUNT(*)+(SELECT COUNT(*) FROM T2) FROM T1


 
DenK_vrtz   (2003-07-09 11:44) [3]

Скобку забыл в конце поставить :-)


 
DenK_vrtz   (2003-07-09 11:46) [4]

Johnmen © (09.07.03 11:44), а повторяющиеся записи тоже посчитаются! :-)


 
Johnmen   (2003-07-09 11:49) [5]

>DenK_vrtz © (09.07.03 11:46)

Предполагаю, что автор сам сообразит, где расставить DISTINCT
:)))


 
Max Zyuzin   (2003-07-09 11:50) [6]

>McSimm2 (09.07.03 11:34)
select
(select count(*) from (SELECT DISTINCT ulica, dom, kvart FROM table1))
+
(select count(*) from (SELECT DISTINCT ulica, dom, kvart FROM table2))
from dual


 
DenK_vrtz   (2003-07-09 11:50) [7]

Johnmen © (09.07.03 11:49), согласен! :-))


 
Max Zyuzin   (2003-07-09 11:51) [8]

На сколько у меня короче вышло не знаю :-)


 
DenK_vrtz   (2003-07-09 11:56) [9]

McSimm2 (09.07.03 11:34), статистику по выполнениям запросов, в студию, пожалуйста!!! :-)


 
McSimm2   (2003-07-09 12:00) [10]

SELECT SUM ( QUERY.sum0 + QUERY.sum1 + QUERY.sum2) AS allsum
FROM (SELECT 0 AS sum0, 0 AS sum1, COUNT (*) AS sum2
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_ved)
UNION
SELECT 0 AS sum0, COUNT (*) AS sum1, 0 AS sum2
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_chs)
UNION
SELECT COUNT (*) AS sum0, 0 AS sum1, 0 AS sum2
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm)) QUERY


выполнялся 32 секунды, а


SELECT (SELECT COUNT (*)
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_ved )t2)
+ (SELECT COUNT (*)
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_chs)t3)
+ (SELECT COUNT (*)
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm)t1)
from dual

выполнялся 33 секунды, проще говоря по скорости ничего не выгодал :( ...


 
Johnmen   (2003-07-09 12:08) [11]

>McSimm2

Какого типа поля ulica, dom, kvart ?


 
DenK_vrtz   (2003-07-09 12:27) [12]

Огласите весь список, пожалуйста :-)


 
Max Zyuzin   (2003-07-09 12:49) [13]

Зато запрос стал стильнее выглядеть :-)


 
Johnmen   (2003-07-09 12:57) [14]

Кстати, еще проще :
в DenK_vrtz © (09.07.03 11:43) просто убрать DISTINCT и all

Но вопрос пока остается - Johnmen © (09.07.03 12:08).


 
McSimm2   (2003-07-09 13:11) [15]

ULICA VARCHAR2 (15),
DOM VARCHAR2 (7),
KVART VARCHAR2 (3),


 
DenK_vrtz   (2003-07-09 13:15) [16]

Johnmen © (09.07.03 12:57), законно! Но будет ли быстрее, это вопрос!


 
Johnmen   (2003-07-09 13:22) [17]

>McSimm2 (09.07.03 13:11)

Тогда так :

SELECT
COUNT(DISTINCT ulica||"#"||dom||"#"||kvart)+
(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T2)+
(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T3)+
FROM T1

где вместо # м.б. любой символ, заведомо не встречающийся в значениях полей.

>DenK_vrtz © (09.07.03 13:15)

А это пусть автор проверяет. Заодно и, надеюсь, сообщит результаты.


 
McSimm2   (2003-07-09 13:38) [18]

To Johnmen © (09.07.03 13:22)

Такая конструкция не правильна !!!:

SELECT
COUNT(DISTINCT ulica||"#"||dom||"#"||kvart)+
(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T2)+
(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T3)+
FROM T1


Прокатывает когда пишешь

SELECT (SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart)FROM T1)+
(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T2)+
(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T3)
from dual


Время отработки - 33 секунды, что опять же то же самое :(


 
Johnmen   (2003-07-09 13:45) [19]

>McSimm2 (09.07.03 13:38)
>Такая конструкция не правильна !!!:

Такая конструкция правильна. Просто закрывающие скобки упустил...:)
SELECT COUNT+(SELECT)+(SELECT) FROM T

А какой показатель у Johnmen © (09.07.03 12:57) ?


 
McSimm2   (2003-07-09 13:51) [20]

Johnmen © (09.07.03 12:57).
Distinct важен !!! его нельзя убирать..

Johnmen © (09.07.03 13:45)

SELECT
COUNT(DISTINCT ulica||"#"||dom||"#"||kvart)+
(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T2)+
^^^^^ Групповая функция является одногрупной

(SELECT COUNT(DISTINCT ulica||"#"||dom||"#"||kvart) FROM T3)
FROM T1


 
DenK_vrtz   (2003-07-09 13:53) [21]

а результат DenK_vrtz © (09.07.03 11:43), интересно же! :-)
McSimm2 (09.07.03 13:51), так union и так повторяющиеся строки уберет!


 
McSimm2   (2003-07-09 13:54) [22]

Точнее "Групповая функция НЕ является одногруппной" :)


 
Johnmen   (2003-07-09 13:54) [23]

>McSimm2 (09.07.03 13:51)

Ты не понял...См. DenK_vrtz © (09.07.03 11:43), но так :
selct count(*) from
(
SELECT ulica, dom, kvart FROM table1
union
SELECT ulica, dom, kvart FROM table2)




 
McSimm2   (2003-07-09 14:08) [24]


SELECT COUNT (*)
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_ved
UNION ALL
SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_chs
UNION ALL
SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm)


33 секунды


SELECT COUNT (*)
FROM (SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_ved
UNION
SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_chs
UNION
SELECT DISTINCT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm)



36 секунд


 
DenK_vrtz   (2003-07-09 14:14) [25]

McSimm2 (09.07.03 14:08), так не надо во втором запросе DISTINCT писать, так как union выкинет повторяющиеся строки!


 
McSimm2   (2003-07-09 14:16) [26]

Млин, действительно - ща попробую !


 
Johnmen   (2003-07-09 14:16) [27]

>McSimm2 (09.07.03 14:08)

М-да... По-моему ты уже глумишься...:[


 
McSimm2   (2003-07-09 14:21) [28]

Нет
Johnmen © (09.07.03 14:16)
ты не прав !!!

Запрос


SELECT COUNT (*)
FROM (SELECT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_ved
UNION all
SELECT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_chs
UNION all
SELECT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm)


отработал 150 милисекунд !!
Спасибо всем - из запроса выжато всё что можно !!!


 
DenK_vrtz   (2003-07-09 14:24) [29]

А Johnmen © как раз прав!!!
McSimm2 (09.07.03 14:21), млин, а где же ВАЖНЫЙ DISTINCT?
Замени ты union all на union!


 
McSimm2   (2003-07-09 14:30) [30]

DenK_vrtz © (09.07.03 14:24)
Ты чего кричишь ???
Union без distinct работает горааздо дольше нежели
union all без того же distinct.
Зачем distinct писать если выяснилось что он повторяющиеся строки выкинет?
В первом запросе его оставляю в 2 других выкидываю, но скорость выполнения не меняется, вот если ещё и union на union all полменять то скорость увеличивается


 
Johnmen   (2003-07-09 14:32) [31]

Один принципиальный момент -
#надо отдельно получить колич.неповторяющихся для трех таблиц и потом их сложить, или
#надо получить общее колич.неповторяющихся в трех таблицах
?


 
DenK_vrtz   (2003-07-09 14:34) [32]

McSimm2 (09.07.03 14:30), еще бы скорость не увеличилась.
union выкидывает повторяющиеся строки, а union all кидает все в одну кучу!


 
McSimm2   (2003-07-09 14:40) [33]

надо получить общее колич.неповторяющихся в трех таблицах


 
DenK_vrtz   (2003-07-09 14:44) [34]

SELECT count(*) FROM
(SELECT ulica, dom, kvart, n_lc, rajon, jeu
FROM (SELECT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_ved
UNION all
SELECT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm_chs
UNION all
SELECT ulica, dom, kvart, n_lc, rajon, jeu
FROM ivc.ksm)
group by ulica, dom, kvart, n_lc, rajon, jeu)

еще вариант!



 
McSimm2   (2003-07-09 14:48) [35]

DenK_vrtz © (09.07.03 14:44)
Полторы минуты отрабатывал 1.36 сек
Самый быстрый остаётся
McSimm2 (09.07.03 14:21)
150 милисекунд


 
Johnmen   (2003-07-09 14:50) [36]

>McSimm2 (09.07.03 14:40)
>надо получить общее колич.неповторяющихся в трех таблицах

Johnmen © (09.07.03 13:54)
И не надо перевирать текст приводимых запросов...
:)


 
DenK_vrtz   (2003-07-09 14:52) [37]

McSimm2 (09.07.03 14:48), а в нем будут повторяющиеся стоки, поверь! :-)


 
McSimm2   (2003-07-09 14:57) [38]

Johnmen © (09.07.03 14:50)
Что то не понял чего я там где переврал ? :)


 
DenK_vrtz   (2003-07-09 15:00) [39]

McSimm2, я занл, что будет долгоработать DenK_vrtz © (09.07.03 14:44), но интересно было на сколько :-)
а в McSimm2 (09.07.03 14:21) повторение строк будет обязательно!


 
McSimm2   (2003-07-09 15:01) [40]

DenK_vrtz © (09.07.03 14:52)
Да ладно не может такого быть. Если в первом стоит distinct, а между первым и вторым и вторым и третьим union all - то как же они появятся!
К тому же я свою ошибку уже осознал - совокупность n_lc+jeu+rajon
даёт уникальность для записи, так что distinct мне как корове седло был нужен. Во всей каше из 3 таблиц - каждая запись уникальна!



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

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

Наверх




Память: 0.53 MB
Время: 0.01 c
3-100619
Well
2003-07-09 16:25
2003.07.31
ADO. Связь с БД при переносе приложения на другой ПК


6-100848
servs
2003-05-22 19:45
2003.07.31
TEmbeddedWB и нажатия клавиш


3-100553
Silver_
2003-07-07 12:44
2003.07.31
ADODataSetDeforeEdit ----> Имя текущего поля


14-100938
Snake2000
2003-07-15 11:40
2003.07.31
Просмотр *.mdb


1-100664
Immortal_Death
2003-07-17 16:56
2003.07.31
TreeView и Drag&Drop :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский