Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многотабличный запрос (MySQL)


Страницы:   1 2 3

Юрий ©   (2007-04-18 09:59:00) 

Имеется несколько таблиц в одной базе данных. Все столбцы таблиц одинаковы (и по имени, и по типу хранимых данных). Необходимо из всех этих таблиц выбрать группу данных, удовлетворяющих условию, и сгруппировать по другому полю.

(SELECT * FROM table1 WHERE some_field1='ok' GROUP BY some_field2)
UNION ALL
(SELECT * FROM table2 WHERE some_field1='ok' GROUP BY some_field2)
UNION ALL
...


Соответственно, получаем в результирующем наборе данных две копии группировок по полю some_field2:

1
2
3
1
2
3
...


Конечно, можно убрать UNION ALL и написать UNION, но тогда убираются всеидентичные строки по всем столбцам, а не только по полю some_field2.

Вопрос: можно ли от этого избавиться или нужен другой подход? Если да, то какой.

PS. СУБД - MySQL 5.x


Jan1   (2007-04-18 10:54:00) [21]


> Есть проверки по часам, я суммирую количество выявленных
> ошибок в группе (т.е. одном часе проверки).

а тебя не интересует какой это час?


Jan1   (2007-04-18 10:53:00) [22]


> Повторяющиеся строки удалять не надо (DISTINCT), их нужно
> учитывать.

т.е. я так понимаю разные таблицы у тебя - это ошибки от разных источников? Почему не об\дна таблица со ссылкой на источник?


Юрий   (2007-04-18 10:50:00) [23]

Вообщем чтобы было по-понятней, есть таблица:

timestamp            check
2004-02-01 01:20:00  ok
2004-02-01 01:35:00  ok
2004-02-01 02:05:00  not_ok
...


Мне нужно узнать сколько ошибок было в одном часе.


Юрий   (2007-04-18 10:46:00) [24]

> [16] Jan1   (18.04.07 10:44)

Есть проверки по часам, я суммирую количество выявленных ошибок в группе (т.е. одном часе проверки).


Юрий   (2007-04-18 10:45:00) [25]

Повторяющиеся строки удалять не надо(DISTINCT), их нужно учитывать.


Jan1   (2007-04-18 10:44:00) [26]


> SELECT COUNT(*) as error_count FROM table WHERE check='not_ok'
> AND timestamp >= '2007-04-12' AND timestamp <= '2007-04-
> 16' GROUP BY HOUR(timestamp)

зачем здесь группировка?


Юрий   (2007-04-18 10:29:00) [27]

> [14] Юрий ©   (18.04.07 10:25)

Такой запрос прекрасно работал для одной талбицы:

SELECT COUNT(*) as error_count FROM table WHERE check='not_ok' AND timestamp >= '2007-04-12' AND timestamp <= '2007-04-16' GROUP BY HOUR(timestamp)


Юрий   (2007-04-18 10:25:00) [28]

> [13] Jan1   (18.04.07 10:23)

SELECT DISTINCT ...
Это понятно, он удаляет дубликаты, но проблема в том, что данные не хранятся как 1,2,3,4, а хранятся как datetime. Соответственно HOUR в GROUP BY.


Jan1   (2007-04-18 10:23:00) [29]


> Я так представляю, были записи:
>
> 1
> 2
> 2
> 3
> 3
> 4
> 5
> 5
>
> то в результате получим:
>
> 1
> 2
> 3
> 4
> 5
>
> Я не прав?

читать про distinct


Юрий   (2007-04-18 10:22:00) [30]

> [10] Jan1   (18.04.07 10:20)
> а куда ORDER BY дел?

Ошибка, читать как "используется только с ORDER BY", торопился.


Юрий   (2007-04-18 10:21:00) [31]

> [9] Jan1   (18.04.07 10:20)

Я так представляю, были записи:

1
2
2
3
3
4
5
5

то в результате получим:

1
2
3
4
5

Я не прав?


Jan1   (2007-04-18 10:20:00) [32]


> Просмотрел главу, понятно что UNION используется только
> с GROUP BY, и в качестве столбца указывается его номер

а куда ORDER BY дел?


Jan1   (2007-04-18 10:20:00) [33]


> У меня группируется по часам: HOUR(some_field2).

что такое группировка?


Юрий   (2007-04-18 10:19:00) [34]

> [6] Jan1   (18.04.07 10:18)
> на основании какой операции? и нужно ли оно тебе?

У меня группируется по часам: HOUR(some_field2).


Юрий   (2007-04-18 10:18:00) [35]

> [4] Jan1   (18.04.07 10:12)
> короче прочитай в той же книге все про UNION

Просмотрел главу, понятно что UNION используется только с GROUP BY, и в качестве столбца указывается его номер. Применения к своему вопросу не нашёл.


Jan1   (2007-04-18 10:18:00) [36]


> Группировка - группирует по какому-то полю.

на основании какой операции? и нужно ли оно тебе?


Юрий   (2007-04-18 10:16:00) [37]

> [4] Jan1   (18.04.07 10:12)

Сортировка - упорядочивает данные по возрастанию (ASC), убыванию (DESC).
Группировка - группирует по какому-то полю.

> [3] Jan1   (18.04.07 10:10)

А вот насчёт этого вопроса, ничего не понял. =)


Jan1   (2007-04-18 10:12:00) [38]

короче прочитай в той же книге все про UNION и о разнице между сортировкой ORDER BY и групировкой GROUP BY данных.


Jan1   (2007-04-18 10:10:00) [39]


> Честное слово, эта книга у меня есть.

это уже хорошо. а ты ее читал?
Где ты в ней прочитал вот такое
SELECT * FROM table1 WHERE some_field1='ok' GROUP BY some_field2
?


Юрий   (2007-04-18 10:08:00) [40]

> [1] Jan1   (18.04.07 10:06)

Честное слово, эта книга у меня есть.
=)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо