SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.09.2015 19:52:58

BelOFF
Участник
Зарегистрирован: 29.10.2012
Сообщений: 11

Помогите вытащить нужные данные.

Добрый день.

Есть 2 таблицы в одной хранятся данные  о пользователе вошедшего на сайт (temp_hits), во второй его события на сайте (cnt_sel_2015_09).

Так вот, есть необходимость сгенерировать отчет за месяц по каждому дню, сколько пользователей уникальных заходили, и кол-во (cnt_sel_2015_09.event_code) событий №1, №2 ... №n было исполнено. Номера событий могут быть различными.


-- ----------------------------
-- Таблица хитов
-- ----------------------------
DROP TABLE IF EXISTS `temp_hits`;
CREATE TABLE `temp_hits` (
  `day` int(11) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `domain_id` int(6) NOT NULL,
  `time_stamp` int(12) NOT NULL,
  `uid` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=560466345 DEFAULT CHARSET=utf8;

INSERT INTO `temp_hits` VALUES ('20150901', '560466343', '1', '1441054816', 'ae285dc8b93cff4963a070144df94e8d');
INSERT INTO `temp_hits` VALUES ('20150901', '560466344', '1', '1441054816', 'ae285dc8b93cff4963a070144df94e85');

-- ----------------------------
-- Таблица исполненных событий
-- ----------------------------
DROP TABLE IF EXISTS `cnt_sel_2015_09`;
CREATE TABLE `cnt_sel_2015_09` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hit_id` int(12) NOT NULL,
  `time_stamp` int(12) NOT NULL,
  `event_code` int(3) NOT NULL,
  `event_text` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of cnt_sel_2015_09
-- ----------------------------
INSERT INTO `cnt_sel_2015_09` VALUES ('1', '560466343', '1441054800', '3', '15');
INSERT INTO `cnt_sel_2015_09` VALUES ('2', '560466343', '1441054800', '2', '12');
INSERT INTO `cnt_sel_2015_09` VALUES ('9', '560466343', '1441054800', '2', '13');
INSERT INTO `cnt_sel_2015_09` VALUES ('10', '560466344', '1441054800', '2', '13');

 


В итоге, должно получится

Дата                   Кол-во посетит                    событие 1                событие 2              событие 3
20150901                    2                                     0                             3                          1


Помогите пожалуйста справиться с задачей.

Неактивен

 

#2 11.09.2015 08:27:55

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите вытащить нужные данные.

MariaDB [test]> SELECT `day` `дата`, count(distinct uid) `Кол-во посетит`,
sum(if(event_code=1,1,0)) `событие 1`, sum(if(event_code=2,1,0)) `событие 2`, sum(if(event_code=3,1,0)) `событие 3`
FROM temp_hits t JOIN cnt_sel_2015_09 c ON t.id=c.hit_id;
+----------+----------------+-----------+-----------+-----------+
| дата     | Кол-во посетит | событие 1 | событие 2 | событие 3 |
+----------+----------------+-----------+-----------+-----------+
| 20150901 |              2 |         0 |         3 |         1 |
+----------+----------------+-----------+-----------+-----------+
1 row in set (0.00 sec)

Неактивен

 

#3 11.09.2015 13:17:13

BelOFF
Участник
Зарегистрирован: 29.10.2012
Сообщений: 11

Re: Помогите вытащить нужные данные.

vasya, вообще красавчик. Откуда такие познания в недрах sql?!

А как сделать что бы он выводил списком по датам за каждый день?


INSERT INTO `cnt_sel_2015_09` VALUES ('11', '560466345', '1441954296', '1', 'всвсв');
INSERT INTO `cnt_sel_2015_09` VALUES ('12', '560466345', '1441954296', '2', '');
INSERT INTO `cnt_sel_2015_09` VALUES ('13', '560466345', '1441954296', '1', '');
INSERT INTO `temp_hits` VALUES ('20150902', '560466345', '1', '1441954296', 'ae285dc8b93cff4963a070144df92342');

-- на выходе получить подобное

+----------+----------------+-----------+-----------+-----------+
| дата     | Кол-во посетит | событие 1 | событие 2 | событие 3 |
+----------+----------------+-----------+-----------+-----------+
| 20150901 |              2 |         0 |         3 |         1 |
+----------+----------------+-----------+-----------+-----------+
| 20150902 |              1 |         2 |         1 |         0 |
+----------+----------------+-----------+-----------+-----------+
 


Извини за напряг, просто очень надо...

Отредактированно BelOFF (11.09.2015 13:17:47)

Неактивен

 

#4 11.09.2015 14:21:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите вытащить нужные данные.

SELECT `day` `дата`, count(distinct uid) `Кол-во посетит`,
sum(if(event_code=1,1,0)) `событие 1`, sum(if(event_code=2,1,0)) `событие 2`, sum(if(event_code=3,1,0)) `событие 3`
FROM temp_hits t JOIN cnt_sel_2015_09 c ON t.id=c.hit_id where `day` > '20150831' and `day` < '20151001' group by 1;

+----------+----------------+-----------+-----------+-----------+
| дата     | Кол-во посетит | событие 1 | событие 2 | событие 3 |
+----------+----------------+-----------+-----------+-----------+
| 20150901 |              2 |         0 |         3 |         1 |
| 20150902 |              1 |         2 |         1 |         0 |
+----------+----------------+-----------+-----------+-----------+


Это я группировку прошлый раз забыл добавить. Если нужны все данные, а не за конкретный месяц, то условие where выкинуть.

Неактивен

 

#5 11.09.2015 15:37:16

BelOFF
Участник
Зарегистрирован: 29.10.2012
Сообщений: 11

Re: Помогите вытащить нужные данные.

vasya, спасибо... Очень выручил smile Просто красава...

Неактивен

 

Board footer

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