|
Правильная группировка при объединении трёх таблиц - помогите :(
|
|||
---|---|---|---|
#18+
Всем привет! Сразу скажу - я в sql ноль и если будете писать "ну и курица, какой глупый вопрос" - будете правы. Но вдруг кто сможет помочь... Я уже измучилась и перечитала кучу статей, перепробовала что можно, но до меня не доходит. Две таблицы я в мучениях объединила-таки, результат выдаёт правильный. А вот при объединении трёх таблиц группирует ну просто абы как. Дано три таблицы: festival_history ( в ней столбцы team_id и sum(score ), teams ( столбец title ) и team_players ( столбцы player_id и role ) Сделала группировку двух - всё супер: select team_id, sum(score), title from festival_history left join teams on (festival_history.team_id = teams.id) where festival_id in ( 291) group by team_id, teams.title ORDER BY sum DESC limit 10 Группировка трёх - абы что. Мне кажется из-за того что в строку group by добавляется team_players.player_id , но если не добавлять, то выдает ошибку: либо добавить либо or be used in an aggregate function LINE 1: select festival_history.team_id, sum(score), title, player_id from festival_history left join teams on (festival_history.team_id = teams.id) left join team_players on (teams.id = team_players.player_id) where festival_id in ( 291) and role = 2 group by festival_history.team_id, teams.title, team_players.player_id ORDER BY sum(score) DESC limit 10 Я не понимаю как мне эти три таблицы объединить чтобы всё было как нужно. Третья таблица это всего лишь ID игрока который принадлежит команде, но как я ни пыталась что-то сделать, либо абы что либо ошибки.... Я буду безмерно благодарна если кто-то сможет помочь понять что не так и как сделать чтобы было как нужно :( ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 22:19 |
|
Правильная группировка при объединении трёх таблиц - помогите :(
|
|||
---|---|---|---|
#18+
JannyDoe, если в селекте более 1 таблицы, все имена полей обязательно указывайте с именем (или алиасом) таблицы. Третья таблица должна иметь поле team_id, и вот по нему следует связывать. Ну и про форматирование не забывайте, типа так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 15:58 |
|
Правильная группировка при объединении трёх таблиц - помогите :(
|
|||
---|---|---|---|
#18+
JannyDoe, Объединение трех таблиц ничем не отличается от двух. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
С конца: прим. к GROUP BY означает, что если в группировку попало несколько записей, то в вывод SELECT попадет Сумма всех полей score такого попадалова. ПОЭТОМУ, в выводе должны быть или ключи группировки или агрегатные функции. Объединение может "размножать" записи из родительской таблицы. Объединение выдает как-бы "расширенную таблицу" из всех полей всех объединяемых таблиц в части SELECT вы оставляете только нужное Вам. Добавление третьей таблицы - ничего не меняет выше из выводов .. итого станет ишо "ширее". :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Если добавить, то player_id становится ключом группировки, и выход с тремя ключами - уникален. Есть только одна результирующая запись. Если убрать player_id из GROUP BY то записей с уникальными ключами team_id И title становится НЕСКОЛЬКО. Из КАКОЙ записи Вам требуется player_id? Чтобы это указать, как раз и нужны АГРЕГАТНЫЕ функции. Чтобы увидеть все игроков, воткните GROUP_CONCAT() по смотрите сколько записей собирается группировкой по двум полям. Какие там попадаются player_id .. может это поможет понять какой из них нужен (первый, последний, все скопом, самый большой, наименьший и т.д) :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 17:49 |
|
Правильная группировка при объединении трёх таблиц - помогите :(
|
|||
---|---|---|---|
#18+
Я бы порекомендовал сделать пару-тройку простеньких табличек с 2-3 полями и "поиграться с объединениями", левым, правым, декартовым .. многое станет понятней, особенно если рядом есть учебник. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 17:54 |
|
Правильная группировка при объединении трёх таблиц - помогите :(
|
|||
---|---|---|---|
#18+
paver, спасибо большое! Это работает, невероятно! Теперь мне нужно есть и разобраться в запросе чтобы понять как и что сделано, чтобы в будущем с другими таблицами я смогла сделать так же.... Спасибо вам большое ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 18:56 |
|
Правильная группировка при объединении трёх таблиц - помогите :(
|
|||
---|---|---|---|
#18+
Arhat109, Ох... sum(?.score) это было из таблички festival_history, в других просто не было такого score параметра и я вот так его одиноко и указала. Спасибо большое за комментарии, приписки и объяснения!! Я их читаю и понимаю что моя голова работает в каком-то другом направлении, да еще и знаний мало. Скажем так, я в этом деле даже не новичок, а ноль)) Могу только простенькие запросы делать из одной таблицы и вот, как оказалось, две тоже могу объединить чудом) Третья уже за гранью для меня Но я постараюсь для себя всё же понять и чуть углубиться, на случай если понадобится еще в работе заняться такой деятельностью) А по простеньким табличкам - я себе выписывала просто примеры из статей интернета про объединение 3х таблиц, потом соотносила со своими ( как мне казалось, логично соотносила), но, видимо, что-то я просто не въезжаю пока во всё это и получалось абы что какое-то. Спасибо вам большое на информацию и объяснение! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 19:11 |
|
|
start [/forum/topic.php?fid=47&msg=40005161&tid=1828362]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
134ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 242ms |
0 / 0 |