Форум: "Базы";
Текущий архив: 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.008 c