Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.019 c
1-100775
mox
2003-07-16 22:11
2003.07.31
Edit или Memo др. приложения


1-100808
Ткаченко Сергей
2003-07-17 09:47
2003.07.31
Access violation...


3-100625
paxer
2003-07-08 10:39
2003.07.31
FireBird Embedded


1-100809
Alexxxx
2003-07-16 16:23
2003.07.31
прозрачный WebBrowser


14-100895
Tornado
2003-07-14 13:27
2003.07.31
DBGrid