![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многотабличный запрос (MySQL)
Юрий © (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)
Честное слово, эта книга у меня есть.
=)