Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SUM и групировка... / 7 сообщений из 7, страница 1 из 1
01.04.2003, 17:58
    #32131276
SUM и групировка...
Вот такой запрос:
Код: plaintext
1.
2.
3.
SELECT adverts.advert_id, adverts.contact_full_name, SUM(orders.price) AS price , SUM(visits.amount) AS visits
	   FROM orders,adverts, visits
	   WHERE orders.advert_id=adverts.advert_id AND  visits.advert_id=adverts.advert_id
	   GROUP BY  orders.advert_id, visits.advert_id


Получается что- сумма визитов считается, но столько раз, сколько записей в orders. А цены вообще непойми какое количесто раз. Как правильно сгрупировать????
...
Рейтинг: 0 / 0
01.04.2003, 20:22
    #32131371
medved
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SUM и групировка...
А ты дамп базы пришли.... то бишь вот как здесь:
...
Рейтинг: 0 / 0
02.04.2003, 09:37
    #32131516
SUM и групировка...
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
CREATE TABLE `adverts` (
  `advert_id` tinyint( 4 ) unsigned NOT NULL auto_increment,
  `password` varchar( 16 ) NOT NULL default '',
  `tax_id` tinyint( 2 ) unsigned NOT NULL default '1',
  `contact_email` varchar( 32 ) NOT NULL default '',
  `contact_full_name` varchar( 32 ) NOT NULL default '',
  `contact_nickname` varchar( 12 ) NOT NULL default '',
  `contact_phone` varchar( 12 ) NOT NULL default '',
  `contact_icq` mediumint( 11 ) unsigned default NULL,
  `contact_aol` mediumint( 11 ) unsigned default NULL,
  `payment_minpayout` tinyint( 4 ) unsigned NOT NULL default '0',
  `payment_payableto` varchar( 32 ) NOT NULL default '',
  `payment_mailadress` varchar( 64 ) default NULL,
  `payment_city` varchar( 16 ) default NULL,
  `payment_state` varchar( 16 ) default NULL,
  `payment_zip` tinyint( 6 ) unsigned default NULL,
  `payment_country_id` tinyint( 4 ) unsigned default NULL,
  `payment_taxid` int( 11 ) unsigned default NULL,
  `payment_method` tinyint( 1 ) unsigned NOT NULL default '0',
  `bank_name` varchar( 32 ) default NULL,
  `bank_adress` varchar( 64 ) default NULL,
  `bank_routing` tinyint( 4 ) default NULL,
  `bank_account` varchar( 16 ) default NULL,
  `bank_benname` tinyint( 4 ) default NULL,
  `bank_benadress` tinyint( 4 ) default NULL,
  `bank_intername` varchar( 32 ) default NULL,
  `bank_interadress` varchar( 64 ) default NULL,
  `bank_interrouting` tinyint( 4 ) default NULL,
  `bank_notice` text,
  `web_name` varchar( 24 ) NOT NULL default '',
  `web_url` varchar( 64 ) NOT NULL default '',
  `regdate` datetime default NULL,
  PRIMARY KEY  (`advert_id`)
) TYPE=MyISAM

CREATE TABLE `orders` (
  `order_id` bigint( 20 ) NOT NULL auto_increment,
  `advert_id` tinyint( 4 ) default NULL,
  `customer_id` int( 11 ) default NULL,
  `amount` tinyint( 2 ) unsigned default NULL,
  `type` tinyint( 1 ) unsigned default NULL,
  `price` float( 4 , 2 ) NOT NULL default '0.00',
  `date` date default NULL,
  `delivery_id` bigint( 20 ) NOT NULL default '0',
  PRIMARY KEY  (`order_id`),
  UNIQUE KEY `order_id` (`order_id`)
) TYPE=MyISAM

CREATE TABLE `visits` (
  `date` date NOT NULL default '0000-00-00',
  `advert_id` tinyint( 4 ) default NULL,
  `amount` smallint( 5 ) default NULL,
  PRIMARY KEY  (`date`)
) TYPE=MyISAM
...
Рейтинг: 0 / 0
02.04.2003, 11:14
    #32131602
medved
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SUM и групировка...
Все очень просто..... таже проблема что и здесь /topic/25277\r
У тя перемножение считается, и правильный результат считается только если колво записей в таблице orders = колво записей в таблице visits для каждого участника.\r
\r
Ну мое решение было таким.\r
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
\r
SELECT \r
\t\tadverts.advert_id, \r
\t\tadverts.contact_full_name, \r
\t\tSUM(orders.price)/(count(orders.order_id)/count(distinct orders.order_id)) AS price, \r
\t\tSUM(visits.amount)/(count(visits.date)/count(distinct visits.date)) AS visits\r
FROM \r
\torders,\r
\tadverts, \r
\tvisits\r
WHERE \r
\t\torders.advert_id=adverts.advert_id \r
\tAND \r
\t\tvisits.advert_id=adverts.advert_id\r
GROUP BY adverts.advert_id\r
order by \r
\tadverts.contact_full_name;\r
\r
\r
смысл такой count считает общее количество записей, count distinct уникальных записей - узнаем было ли умножение если нет то count/count distinct=1, если да то делим на него
...
Рейтинг: 0 / 0
02.04.2003, 11:15
    #32131605
medved
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SUM и групировка...
P.S. Нескт тайм шли заодно пару записей ибо вставлять их всех ломает
...
Рейтинг: 0 / 0
02.04.2003, 12:25
    #32131689
SUM и групировка...
Ок! Точно так работает как надо!
Только вот каким макаром float в int перобразовать?
...
Рейтинг: 0 / 0
02.04.2003, 14:50
    #32131891
SUM и групировка...
Разобрался, спасибо...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SUM и групировка... / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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