Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Еще один простой запрос? 
:(
    Опции темы
ArsNov
Дата 19.4.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 1.9.2005

Репутация: нет
Всего: 1



________________________
|   DATE_START   |ID_ROUTE  |
--------------------------------------
|10.09.01              |1           |
|10.09.01            |1         |
|10.09.01              |2         |
|10.09.01            |2         |
|11.09.01              |1           |
|11.09.01            |1           |
-----------------------------

Как получить :

________________________________________
|DATE_START   |COUNT_idroute1|COUNT_idroute2 |
----------------------------------------------------------------
|10.09.01        |2                        | 2             |
|11.09.01        |1                        | 0             |
---------------------------------------------------------
где COUNT_idroute1- количество записей с id_rout=1 за день 
COUNT_idroute2- количество записей с id_rout=2 за день 
PM MAIL ICQ   Вверх
Рыжий
Дата 19.4.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



Пожалуйста:


Код

Select DATE_START, count(*) from TABLE group by date_start 

К сожалению у меня нет возможности проверить код. Отпишись сам.
PM MAIL ICQ   Вверх
ArsNov
Дата 19.4.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 1.9.2005

Репутация: нет
Всего: 1



к сожалению такой вариант даст сумму всех записей за день. А мне надо разделить их по id_route


Это сообщение отредактировал(а) ArsNov - 19.4.2007, 17:58
PM MAIL ICQ   Вверх
Рыжий
Дата 19.4.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: нет
Всего: 20



упс ... еще дату не учел! 


Добавлено через 6 минут и 28 секунд
Хм.... сложный запрос получается smile

Это сообщение отредактировал(а) Рыжий - 19.4.2007, 17:38
PM MAIL ICQ   Вверх
Akina
Дата 19.4.2007, 18:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



MySQL не поддерживает перекрестных запросов (pivot queries).
Но если все значения ID_ROUTE известны и ограничиваются приведенными 1 и 2, то получится что-то вроде

Код

Select T.DATE_START,  T1.COUNT_idroute1, T2.COUNT_idroute2 
From Table T
Full Join
(
   Select DATE_START, Count(*) As COUNT_idroute1
   From Table
   Where ID_ROUTE = 1
   Group By DATE_START
) T1 On T.DATE_START = T1.DATE_START
Full Join
(
   Select DATE_START, Count(*) As COUNT_idroute2
   From Table
   Where ID_ROUTE = 2
   Group By DATE_START
) T2 On T.DATE_START = T2.DATE_START



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ArsNov
  Дата 19.4.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 1.9.2005

Репутация: нет
Всего: 1



Да, заранее известно какие id_route есть. Пробую. спасибо  smile  smile 

Это сообщение отредактировал(а) ArsNov - 19.4.2007, 18:36
PM MAIL ICQ   Вверх
JAPH
Дата 19.4.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 1
Всего: 23



Мои размышления на тему (для простоты date_start => d; id_route => i):
Почти:
Код
SELECT * FROM
    (SELECT d, COUNT(i) AS i1 FROM t WHERE i=1 GROUP BY d) AS t1
    LEFT JOIN
    (SELECT d, COUNT(i) AS i2 FROM t WHERE i=2 GROUP BY d) AS t2
    USING (d)

Выдаёт:
+------------+---+------+
|     d      |i1 |  i2  |
+------------+---+------+
| 2001-09-10 | 2 |   2  |
| 2001-09-11 | 2 | NULL |
+------------+---+------+


Получить ноль мне удалось сначала с помощью такого извращения:
Код
SELECT d, i1, i2 FROM
    (SELECT d, COUNT(i) AS i2 FROM t WHERE i=2 GROUP BY d
        UNION
     SELECT d, 0 FROM t WHERE i<>2 AND d NOT IN (SELECT d FROM t WHERE i=2)
    ) AS t1
    LEFT JOIN
    (SELECT d, COUNT(i) AS i1 FROM t WHERE i=1 GROUP BY d
        UNION
     SELECT d, 0 FROM t WHERE i<>1 AND d NOT IN (SELECT d FROM t WHERE i=1)
    ) AS t2
    USING (d)

+------------+---+------+
|     d      |i1 |  i2  |
+------------+---+------+
| 2001-09-10 | 2 |   2  |
| 2001-09-11 | 2 |   0  |
+------------+---+------+

Посмеялись. Потому что то же самое делает
Код
SELECT d, SUM(i1), SUM(i2) FROM
    (SELECT d, COUNT(i) AS i1, 0 AS i2 FROM t WHERE i=1 GROUP BY d
        UNION
     SELECT d, 0, COUNT(i) FROM t WHERE i=2 GROUP BY d) AS tt
GROUP BY d


Это сообщение отредактировал(а) JAPH - 19.4.2007, 18:48


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
ArsNov
Дата 19.4.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 1.9.2005

Репутация: нет
Всего: 1



не работает, можно указать названия таблиц перед полями?
PM MAIL ICQ   Вверх
JAPH
Дата 19.4.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 1
Всего: 23



ArsNov, это вы кому? Текст ошибки?

У меня всё работает... MySQL 5.0.18.
Код
CREATE TABLE t ( d DATE NOT NULL, i INT NOT NULL );

INSERT INTO t
VALUES ('2001-09-10', 1), ('2001-09-10', 1), ('2001-09-10', 2), ('2001-09-10', 2), ('2001-09-11', 1);

SELECT d, SUM(i1), SUM(i2)
FROM (SELECT d, COUNT(i) AS i1, 0 AS i2 FROM t WHERE i=1 GROUP BY d
      UNION
      SELECT d, 0, COUNT(i) FROM t WHERE i=2 GROUP BY d)
AS tt GROUP BY d;


Зато:
Код
CREATE TABLE tab (
    DATE_START DATE NOT NULL,
    ID_ROUTE INT NOT NULL
);

INSERT INTO tab
VALUES ('2001-09-10', 1), ('2001-09-10', 1), ('2001-09-10', 2), ('2001-09-10', 2), ('2001-09-11', 1);

Select T.DATE_START,  T1.COUNT_idroute1, T2.COUNT_idroute2
From tab T    Full Join
(
   Select DATE_START, Count(*) As COUNT_idroute1
   From tab
   Where ID_ROUTE = 1
   Group By DATE_START
) T1 On T.DATE_START = T1.DATE_START
Full Join
(
   Select DATE_START, Count(*) As COUNT_idroute2
   From tab
   Where ID_ROUTE = 2
   Group By DATE_START
) T2 On T.DATE_START = T2.DATE_START;


DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Full Join ( Select DATE_START, Count(*) As COUNT_idroute1 at ...pl line ..



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
ArsNov
Дата 19.4.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 1.9.2005

Репутация: нет
Всего: 1



спасибо! разобрался
PM MAIL ICQ   Вверх
SelenIT
Дата 19.4.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 6
Всего: 401



Цитата

Еще один простой запрос

Код

SELECT DATE_START, SUM(IF(id_route = 1, 1, 0)) as count_idroute1, SUM(IF(id_route = 2, 1, 0)) as count_idroute2  FROM table GROUP BY date_start 



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
muzer
Дата 20.4.2007, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Код

SELECT date_start, SUM(id_route = 1) as idroute1, SUM(id_route = 2) as idroute2  FROM table GROUP BY date_start 


Добавлено через 1 минуту и 7 секунд
Akina, JAPH, вы где такую траву берёте?
PM WWW   Вверх
Akina
Дата 20.4.2007, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Я с MySQL не работаю (если не считать ответов тут), посему его особенностей не знаю. SUM(id_route = 1) - это фича.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.