SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 08.03.2013 19:26:56

tvsjke
Участник
Зарегистрирован: 08.03.2013
Сообщений: 6

Подзапрос, помощь

Собственно, нужно вывести список клиентов, сделавших одинаковые ставки на разные матчи.

Соотв-й фрагмент таблицы:
http://i.piccy.info/i7/6acd94ddd8a341650a7e9845441d4389/4-56-501/6901527/123123_240.jpghttp://i.piccy.info/a3/2013-03-08-14-57/i7-4241715/240x202-r/i.gif
где sum - сумма ставки


Вроде простенько, но что-то у меня голова не варит чем именно нужно восп-ся, чтобы вывести именно одинаковые ставки на разные матчи sad

Буду благодарен за любую помощь

Отредактированно tvsjke (08.03.2013 19:32:42)

Неактивен

 

#2 08.03.2013 19:49:11

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

Re: Подзапрос, помощь

select client_id from bets group by match_id, `sum` having count(*)>1;

Неактивен

 

#3 08.03.2013 20:24:50

tvsjke
Участник
Зарегистрирован: 08.03.2013
Сообщений: 6

Re: Подзапрос, помощь

хммм, выдает:
колонка "bets.client_id" должна фигурировать в предложении GROUP BY или использоваться в агрегатной функции
и, если можно, вывод сделать по типу
client_id match_id sum
1           1             50
1           2             50
1           24           50
3           1             140

Как-то так.

Отредактированно tvsjke (08.03.2013 20:31:28)

Неактивен

 

#4 09.03.2013 21:38:35

tvsjke
Участник
Зарегистрирован: 08.03.2013
Сообщений: 6

Re: Подзапрос, помощь

блин, люди добрые, кому не лень - потратьте пять минут своего времени и помогите пжлст, сессия горит, руки кривые, замкнутый круг smile

Неактивен

 

#5 09.03.2013 23:37:23

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Подзапрос, помощь

Приведите Ваш набор данных (то есть содержимое таблицы bets), на котором выдаётся ошибка, не могу воспроизвести.
Чтобы выводилось в том виде, который Вы хотите попробуйте
select client_id, match_id, sum from t_6529 group by match_id, `sum` having count(*)>1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 10.03.2013 00:06:03

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

Re: Подзапрос, помощь

У меня что то не получился простой запрос, но вроде выдает правильные данные.

select distinct obshie_stavki.client_id from
(select client_id,count(client_id) from bets group by client_id, `sum`
having count(*)>1
)obshie_stavki join
(select client_id,count(client_id) from bets group by client_id, `sum`,match_id
having count(*)=1
)obshie_matchi on(obshie_stavki.client_id=obshie_matchi.client_id)


Выдает 4 и 5 только у которых есть одинаковые ставки на разные матчи.



create table `bets` (
    `client_id` double ,
    `match_id` double ,
    `sum` double
);
insert into `bets` (`client_id`, `match_id`, `sum`) values('1','1','10');
insert into `bets` (`client_id`, `match_id`, `sum`) values('1','2','20');
insert into `bets` (`client_id`, `match_id`, `sum`) values('2','1','20');
insert into `bets` (`client_id`, `match_id`, `sum`) values('2','1','20');
insert into `bets` (`client_id`, `match_id`, `sum`) values('5','3','20');
insert into `bets` (`client_id`, `match_id`, `sum`) values('5','1','20');
insert into `bets` (`client_id`, `match_id`, `sum`) values('4','1','10');
insert into `bets` (`client_id`, `match_id`, `sum`) values('4','2','10');
insert into `bets` (`client_id`, `match_id`, `sum`) values('5','1','20');
insert into `bets` (`client_id`, `match_id`, `sum`) values('4','3','20');

Отредактированно evgeny (10.03.2013 00:09:26)

Неактивен

 

#7 10.03.2013 13:01:33

tvsjke
Участник
Зарегистрирован: 08.03.2013
Сообщений: 6

Re: Подзапрос, помощь

evgeny, спасибо, все работает четко, но хотелось бы еще

tvsjke написал:

и, если можно, вывод сделать по типу
client_id match_id sum
1           1             50
1           2             50
1           24           50
3           1             140

тоесть не distinct client_id, а в таком же кол-ве, как кол-во одинаковых ставок,
в случае Вашего insert должно было бы выводиться

4   1   10
4   2   10
5   3   20
5   1   20

И да, еще раз спасибо за помощь.

Неактивен

 

#8 10.03.2013 13:33:27

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

Re: Подзапрос, помощь

Если убрать дублированную ставку (возможно вам такие случаи вообще не нужны)

insert into `bets` (`client_id`, `match_id`, `sum`) values('5','1','20');
insert into `bets` (`client_id`, `match_id`, `sum`) values('5','1','20');


То можно сделать довольно простым способом
SELECT b1.* FROM bets b1
JOIN bets b2 ON(b1.client_id=b2.client_id AND  b1.`sum` =b2.`sum` AND b1.`match_id`!=b2.`match_id`)

Неактивен

 

#9 10.03.2013 16:03:09

tvsjke
Участник
Зарегистрирован: 08.03.2013
Сообщений: 6

Re: Подзапрос, помощь

Статус под Вашим ником истину глаголит wink Спасибо, все идеально

Неактивен

 

#10 10.03.2013 21:35:32

tvsjke
Участник
Зарегистрирован: 08.03.2013
Сообщений: 6

Re: Подзапрос, помощь

Someone help again

Нужно сделать триггер - удаление клуба.
Фрагмент таблицы:
http://i.piccy.info/i7/e7a2689c14948b4afb62fc92bbbdaabb/4-56-576/23506770/123123123_240.jpghttp://i.piccy.info/a3/2013-03-10-17-06/i7-4250824/240x202-r/i.gif

Почитав статейки, погуглив, настрочил вот что:

create or replace function del_club()
RETURNS TRIGGER AS $$
BEGIN
IF (SELECT COUNT(*) FROM matches_clubs WHERE club_id=OLD.id)>0
THEN DELETE FROM matches_clubs WHERE club_id=OLD.id;
END IF;
RETURN OLD;
END;
$$LANGUAGE plpgsql;
CREATE trigger del_club
BEFORE DELETE
ON clubs
FOR EACH ROW
EXECUTE PROCEDURE del_club();

Выбивает ошибку, связанную с OLD (возможно, она не единственна smile).

Отредактированно tvsjke (10.03.2013 21:38:46)

Неактивен

 

Board footer

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