Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать запрос / 15 сообщений из 15, страница 1 из 1
24.06.2003, 17:40
    #32190523
Alfa2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
Мускулем занялся недавно, поэтому много гллупых вопросов возникает...
Вопрос:

Есть несколько таблиц
# --------------------------------------------------------
# Хост: localhost
# Время создания: Июн 24 2003 г., 17:23
# Версия сервера: 4.00.13
# Версия PHP: 4.3.0
# БД : `n_b`
# --------------------------------------------------------

#
# Структура таблицы `antares`
#

CREATE TABLE antares (
data date NOT NULL default '2003-06-31',
gsm ENUM('А-95', 'А-92', 'А-80', 'А-76', 'Дт') NOT NULL,
prixod varchar(20) NOT NULL default '0,00',
rasxod varchar(20) NOT NULL default '0,00',
ostatok varchar(20) NOT NULL default '0,00',
KEY gsm (gsm)
) TYPE=MyISAM;

#
# Дамп данных таблицы `antares`
#

INSERT INTO antares VALUES ('2003-06-04', 'А-95', '0,00', '1000,00', '164475,00');
INSERT INTO antares VALUES ('2003-06-04', 'А-92', '0,00', '0,00', '157795,00');
INSERT INTO antares VALUES ('2003-06-04', 'А-80', '0,00', '0,00', '78769,60');
INSERT INTO antares VALUES ('2003-06-04', 'А-76', '0,00', '0,00', '497000,00');
INSERT INTO antares VALUES ('2003-06-04', 'Дт', '0,00', '0,00', '203245,00');
# --------------------------------------------------------

#
# Структура таблицы `bologoe`
#

CREATE TABLE bologoe (
data date NOT NULL default '2003-06-31',
gsm ENUM('А-76', 'Дт', 'Б-1') NOT NULL,
prixod varchar(20) NOT NULL default '0,00',
rasxod varchar(20) NOT NULL default '0,00',
ostatok varchar(20) NOT NULL default '0,00',
KEY gsm (gsm)
) TYPE=MyISAM;

#
# Дамп данных таблицы `bologoe`
#

INSERT INTO bologoe VALUES ('2003-06-05', 'Дт', '0,00', '17230,44', '139859,56');
INSERT INTO bologoe VALUES ('2003-06-05', 'А-76', '0,00', '0,00', '102233,00');
INSERT INTO bologoe VALUES ('2003-06-05', 'Б-1', '0,00', '0,00', '144600,00');
# --------------------------------------------------------

требуется вывести отчет (вот тут у меня есть проблемы ...)
суммировать поле rasxod из всех таблиц, но не просто,а по полю gsm
и вывести результаты отсортировав по полю data.

я уже голову всю сломал, как ...
не дайте умереть, помоготи кто, чем может ...
...
Рейтинг: 0 / 0
24.06.2003, 18:18
    #32190578
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
Все неправильно. В корне.
У тебя 2 абослютно одинаковые таблицы . Зачем хранить одинаковые данные в таблицах?
Так никто не делает.
делают так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE TABLE fuel_types(
  id   int not null,
  name varchar( 5 ),
  primary key(id)
);

CREATE TABLE cities(
   id   int not null auto_increment,
   name varchar( 255 ),
   primary key(id)
);

CREATE TABLE fuel_usage_stats(
  id            int not null auto_increment,
  ctime         datetime,
  fuel_types_id int not null,
  cities_id     int not null,
  prihod        int not null,
  rashod       int not null,
  primary key (id)
);

SELECT
  fuel_types_id, SUM(rashod)
FROM
  fuel_usage_stats
GROUP BY fuel_types_id
ORDER BY ctime;  -- Выбираем сумму по всем городам,
 
                        -- с группировкой по типу топлива
 
...
Рейтинг: 0 / 0
24.06.2003, 18:23
    #32190591
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
В запросе - ошибка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
надо так:
SELECT
  fuel_types_id, SUM(rashod)
FROM
  fuel_usage_stats
GROUP BY fuel_types_id, ctime
ORDER BY ctime; 


Ну и данные туда.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
INSERT INTO fuel_types VALUES( 1 , 'А-95');
INSERT INTO fuel_types VALUES( 2 , 'А-92');
INSERT INTO fuel_types VALUES( 3 , 'А-80');
INSERT INTO fuel_types VALUES( 4 , 'А-76');
INSERT INTO fuel_types VALUES( 5 , 'Дт');

INSERT INTO cities (name) VALUES ('Антарес');
INSERT INTO cities (name) VALUES ('Бологое');
INSERT INTO cities (name) VALUES ('Норильск');


INSERT INTO fuel_usage_stats (ctime, fuel_types_id, cities_id, prihod, rashod)
VALUES (NOW(),  1 ,  2 ,  20000 ,  10000 );


...
Рейтинг: 0 / 0
24.06.2003, 18:26
    #32190595
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
Да, и создание таблиц без первичного ключа - отвратительно.
...
Рейтинг: 0 / 0
25.06.2003, 13:14
    #32191138
Alfa2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
с созданием таблиц разобрался, а вот с выводом результатов не очень

Твой запрос

SELECT
fuel_types_id, SUM(rashod)
FROM
fuel_usage_stats
GROUP BY fuel_types_id, ctime
ORDER BY ctime

выведет строки вида

I гсм I Расход I
-----------------
I 1 I 1000,00 I
-----------------
I 2 I 500,00 I
------------------

Добавим ctime

SELECT
ctime, fuel_types_id, SUM(rashod)
FROM
fuel_usage_stats
GROUP BY fuel_types_id, ctime
ORDER BY ctime

получим

I дата I гсм I Расход I
------------------------------
I 2003-06-07 I 1 I 1000,00 I
------------------------------
I 2003-06-07 I 2 I 500,00 I
------------------------------

Происходит вывод не суммы, а всех записей, или я что-то не понял ???

Или может я плохо сформулировал вопрос:

суммировать поле rasxod всех городов (cities.name),
по полю fuel_types.name
и вывести результаты отсортировав по полю fuel_usage_stats.ctime.

результат должен выглядить примено так:

I дата I гсм I Расход I
------------------------------
I 2003-06-07 I А-95 I 1000,00 I
------------------------------
I 2003-06-07 I А-92 I 500,00 I
------------------------------
I 2003-06-08 I А-95 I 200,00 I
...
Рейтинг: 0 / 0
25.06.2003, 13:37
    #32191183
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT 
ctime, fuel_types_id, SUM(rashod) 
FROM 
fuel_usage_stats 
GROUP BY fuel_types_id, ctime, cities_id
ORDER BY ctime

При этом сделай поле ctime типом DATE.
...
Рейтинг: 0 / 0
25.06.2003, 14:16
    #32191247
Alfa2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
Заработало!!!!!!!!

только по условию вывода вот так

SELECT
ctime, fuel_types_id, SUM(rashod)
FROM
fuel_usage_stats
GROUP BY fuel_types_id, ctime
ORDER BY ctime

что надо "покрутить", чтоб вместо цифирного fuel_usage_stats.fuel_types_id выдавался fuel_types.name

т.е. не 1 , 2 , 3 ... , а А-95, А-92, А-80 ...
...
Рейтинг: 0 / 0
25.06.2003, 14:52
    #32191310
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
А самому подумать?
Подумать порядка 10 - 20 секунд.
И почитать про пересесения таблиц.
...
Рейтинг: 0 / 0
25.06.2003, 14:55
    #32191313
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
SELECT ctime, fuel_types.name, SUM(rashod)
FROM fuel_usage_stats, fuel_types
WHERE fuel_types.id = fuel_usage_stats.fuel_types_id
GROUP BY fuel_types_id, ctime
ORDER BY ctime
...
Рейтинг: 0 / 0
25.06.2003, 15:07
    #32191332
Stellar.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
SELECT ctime, fuel_types.name, SUM(rashod)
FROM fuel_usage_stats, fuel_types
WHERE fuel_types.id = fuel_usage_stats.fuel_types_id
GROUP BY fuel_types_id, ctime, fuel_types.name
ORDER BY ctime;
...
Рейтинг: 0 / 0
25.06.2003, 15:11
    #32191340
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
А зачем дополнительная группировка по наименованиею (fuel_types.name) ?
Вроде - по fuel_types_id будет достаточно...
...
Рейтинг: 0 / 0
25.06.2003, 15:23
    #32191364
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
2BigHarry, потому что это только в MySQL возможно выбирать поля по которым не происходит группировка. Он в этом случае берет одно из нескольких значений наабум. А так всегда эти поля перечисляют в GROUP BY
...
Рейтинг: 0 / 0
25.06.2003, 15:57
    #32191426
Alfa2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
Всем большое спасибо!

теперь может бухгалтерия оставят меня в покое на денек ...

2Stellar

Обязательно еще почитаю, просто я ентого еще не понял, а "Бух" ногами топает результат ему давай, типа работа стоит.
...
Рейтинг: 0 / 0
26.06.2003, 10:57
    #32192009
BigHarry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
>>Он в этом случае берет одно из нескольких значений наабум.
>>А так всегда эти поля перечисляют в GROUP BY

Почему наобум? Это-же по сути - обычное объедиенние - и любой SQL-сервер должен выдавать нормально, без дополнительной группировки. Группировка - она для функций, а тут - обычная связь...
...
Рейтинг: 0 / 0
26.06.2003, 11:28
    #32192076
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите создать запрос
2BigHarry, если в таблице есть 4 поля, ты группируешь по двум из них, то к другим двум, если ты их хочешь показывать, ты должен применить одну из агригирующих функций.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
cur_rate
+ -----+------------+------+
 
| CUR | Date       | Rate |
+ -----+------------+------+
 
| RUR |  21 . 06 . 2003  |  30 . 5  |
| RUR |  22 . 06 . 2003  |  31 . 6  |
| USD |  21 . 06 . 2003  |   2 . 5  |
| USD |  22 . 06 . 2003  |   3 . 5  |
| EUR |  21 . 06 . 2003  |   1 . 5  |

SELECT a.CUR, a.Date, a.Rate
FROM cur_rate
GROUP BY a.CUR

На твой взгляд, что выдаст скрипт, и на каком основании? На MySQL этот скрипт отработает, а вот на Oracle или MS SQL - НЕТ!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите создать запрос / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]