SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 15.03.2011 09:49:03

skiller_07
Участник
Зарегистрирован: 15.03.2011
Сообщений: 4

Сложный sql запрос + join + group by

Добрый день всем!

В общем вопрос такой:

есть две таблицы вида:


Таблица 1. Tag                                                                                                               
______________
Id |  nid  | tag                          id - простой primary key
                                             nid - номер статьи из другой таблицы
1  |  15   | Petrov                     tag - это тег к статье nid
2  |  16   | Petrov
3  |  17   | Petrov
4  |  18   | Ivanov
5  |  19   | Ivanov
6  |  20   | Sidorov



Таблица 2. Score
______________
Id |  nid  | score                       id - простой primary key
                                             nid - номер статьи из другой таблицы
1  |  15   |    5                          name - это тег к статье nid
2  |  16   |    4
3  |  17   |    4
4  |  18   |    1
5  |  19   |    3
6  |  20   |    1


В результате sql запроса должна быть выбрана такая таблица:

Таблица 3. Result
_____________________
tag    |  count  |  sum                   tag - это тег из (таблицы 1. Tag), причем не повторяются теги
                                                  count - это сколько есть в  (таблице 1. Tag) записей с этим тегом
Petrov   |  3        |   13                  sum - это сумма значений score из   (таблицы 2. Score). Выборка идет по nid, имеющих данный tag
Ivanov   |  2        |   4
Sidorov  |  1        |   1


Составил запрос:

SELECT tag, COUNT(tag) as count, SUM(score) as sum
            FROM tag LEFT JOIN Score ON Tag.nid=Score.nid      
            WHERE tag IS NOT NULL  GROUP BY tag ORDER BY count desc


Но он выводит астрономические цифры. То есть сначало отрабатывает LEFT JOIN, затем GROUP BY. Может подскажите как сделать сначало, чтобы сгруппировать теги, а потом к ним применить LEFT JOIN?

Спасибо за помощь!

Неактивен

 

#2 15.03.2011 10:57:12

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

Re: Сложный sql запрос + join + group by

skiller_07 написал:

Может подскажите как сделать сначало, чтобы сгруппировать теги, а потом к ним применить LEFT JOIN?

С помощью подзапроса

Вот только если вы сначала сгруппируете, то Петрову вместо трех значений nid будет соответствовать только 1 какая-то величина. И как вы планируете объединять таблицы?

Зачем вам условие "WHERE tag IS NOT NULL  "?

Неактивен

 

#3 15.03.2011 11:09:10

skiller_07
Участник
Зарегистрирован: 15.03.2011
Сообщений: 4

Re: Сложный sql запрос + join + group by

WHERE tag IS NOT NULL  - потому, что есть статьи, в которых это поле не установлено, то есть равно = NULL

Вы не поможете составить нормальный запрос? Я что то совсем не понимаю как это можно сделать.

Неактивен

 

#4 15.03.2011 11:22:04

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

Re: Сложный sql запрос + join + group by

skiller_07 написал:

Вы не поможете составить нормальный запрос? Я что то совсем не понимаю как это можно сделать.

Я пытался намекнуть, что в той части, которую вы хотите исправить, он и так правильный.

Меня смущает использование left join действительно он нужен или достаточно inner join. И если всё-таки нужен, то почему вы тогда не делаете проверку score на null значения перед суммированием.

Неактивен

 

#5 15.03.2011 11:27:28

skiller_07
Участник
Зарегистрирован: 15.03.2011
Сообщений: 4

Re: Сложный sql запрос + join + group by

да вы правы, INNER JOIN будет лучше. В итоге получается почти то что надо, но вместо того чтобы показывать кол-во статей с данным тегом, он показывает кол-во людей проголосовавших за статьи с данным тегом. То есть COUNT(tag) должен отработать по таблице TAG, а он почему то отрабатывает по таблице SCORE. Как бы мне ему уточнить табличку? smile

Неактивен

 

#6 15.03.2011 12:05:05

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

Re: Сложный sql запрос + join + group by

Т.е. у вас есть строки в таблице Tag не имеющие соответствия в таблице score? Тогда вам действительно нужно использовать left join.

Неактивен

 

#7 15.03.2011 12:11:34

skiller_07
Участник
Зарегистрирован: 15.03.2011
Сообщений: 4

Re: Сложный sql запрос + join + group by

Да ладно в общем, сделаю 2 запросами... Спасибо вам за содействие! smile

Неактивен

 

Board footer

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