SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.06.2011 21:17:08

aliputin
Завсегдатай
Зарегистрирован: 08.03.2010
Сообщений: 36

Ранжирование по нескольким полям и критериям

Как ранжировать записи по нескольким полям и критериям?

Есть таблица фактов. В ней данные по продажам в разных городах разных стран. Нужно для каждой страны ранжировать города по продажам. При равенстве продаж товара в разных городах сравнивается число магазинов. Т.е. в каждой стране будет свое ранжирование городов по двум критериям: продано и число магазинов. Чем больше продано, тем выше рейтинг; чем больше магазинов в городе, тем выше рейтинг.

Второй критерий вторичен по отношению к первому. Т.е. как если бы эта таблица была в Excel'е и была отсортирована по двум колонкам (продано, магазины) по убыванию.

Я знаю, как сделать сплошное ранжирование по всей таблице без учета стран. Но нужно ставить ранги (пронумеровать) города именно по странам. Как сделать это?


CREATE TABLE `ssold` (
  `country` varchar(11) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0' COMMENT 'страна',
  `city` varchar(11) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0' COMMENT 'город',
  `sold` int(11) DEFAULT NULL COMMENT 'продано',
  `stores` int(11) DEFAULT NULL COMMENT 'число магазинов в городе',
  PRIMARY KEY (`country`,`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Records of ssold
-- ----------------------------
INSERT INTO `ssold` VALUES ('австрия', 'вена', '22', '55');
INSERT INTO `ssold` VALUES ('австрия', 'зальцбург', '21', '16');
INSERT INTO `ssold` VALUES ('германия', 'дортмунд', '54', '16');
INSERT INTO `ssold` VALUES ('германия', 'мюнхен', '74', '26');
INSERT INTO `ssold` VALUES ('германия', 'франкфурт', '78', '18');
INSERT INTO `ssold` VALUES ('германия', 'штутгарт', '12', '55');
INSERT INTO `ssold` VALUES ('испания', 'валенсия', '13', '85');
INSERT INTO `ssold` VALUES ('испания', 'кадис', '79', '23');
INSERT INTO `ssold` VALUES ('испания', 'мадрид', '66', '78');
INSERT INTO `ssold` VALUES ('испания', 'сарагоса', '66', '78');
INSERT INTO `ssold` VALUES ('франция', 'лион', '74', '8');
INSERT INTO `ssold` VALUES ('франция', 'марсель', '19', '85');
INSERT INTO `ssold` VALUES ('франция', 'ницца', '75', '23');
INSERT INTO `ssold` VALUES ('франция', 'париж', '20', '18');
 

Отредактированно aliputin (17.06.2011 18:39:05)


MySQL 5.5.27
MariaDB 5.5.27

Неактивен

 

#2 17.06.2011 02:34:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Ранжирование по нескольким полям и критериям

А чем плохо отсортировать сначала по странам, а потом по количеству
проданного товара, и потом по количеству магазинов?

Неактивен

 

#3 17.06.2011 18:40:14

aliputin
Завсегдатай
Зарегистрирован: 08.03.2010
Сообщений: 36

Re: Ранжирование по нескольким полям и критериям

Нужно ставить ранги (пронумеровать) города, чтобы потом можно было отобрать по 3 лучших города в каждой стране, например.


MySQL 5.5.27
MariaDB 5.5.27

Неактивен

 

#4 18.06.2011 19:00:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Ранжирование по нескольким полям и критериям

Иии... чем плохо отсортировать блаблабла?

Неактивен

 

#5 20.06.2011 17:28:22

aliputin
Завсегдатай
Зарегистрирован: 08.03.2010
Сообщений: 36

Re: Ранжирование по нескольким полям и критериям

И как это выглядит в коде?


MySQL 5.5.27
MariaDB 5.5.27

Неактивен

 

#6 20.06.2011 19:54:30

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Ранжирование по нескольким полям и критериям

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson