[英]MySQL query join and group according to a certain column
我有兩個表,如下所示:
小組
team_id team_name group_id 10001 team_one 50001 10002 team_two 50001 10003 team_three 50002 10004 team_four 50002 10005 team_five 50003 10006 team_six 50003 10007 team_seven 50004 10008 team_eight 50004
組
group_id group_name 50001 group_one 50002 group_two 50003 group_three 50004 group_four
我想實現一個sql選擇,它根據以下各組對團隊進行分組:
group_one
team_one
team_two
group_two
team_three
team_four
group_three
team_five
team_six
group_four
team_seven
team_eight
到目前為止,我已經執行了以下操作:
SELECT
teams.team_name,
teams.soft_name,
teams.group_id,
groups.group_id,
groups.group_name
FROM $table_name
INNER JOIN groups ON teams.group_id = groups.group_id
GROUP BY teams.group_id
問題是,上面的查詢僅顯示每個組中的前四個團隊。 即team_one,team_three,team_five,team_seven。 如何更改它以達到期望的結果?
解決方案非常簡單-我不確定為什么@MKhalidJunaid說不建議這樣做:
在多個列上使用GROUP BY
,如下所示:
SELECT
teams.team_name,
teams.soft_name,
teams.group_id,
groups.group_id,
groups.group_name
FROM $table_name
INNER JOIN groups ON teams.group_id = groups.group_id
GROUP BY teams.group_id, teams.team_id
有關完整說明,請參見此答案 。
我假設您寧願使用ORDER BY,而不是GROUP BY,因為:
SELECT teams.team_name, teams.soft_name,teams.group_id, groups.group_id, groups.group_name FROM $table_name INNER JOIN groups ON teams.group_id = groups.group_id ORDER BY teams.group_id
在mysql列中,結果中的名稱必須唯一,否則MYSQL將選擇其中之一並將其呈現。
SELECT teams.team_name, teams.soft_name,teams.group_id as Team_Group_ID,
groups.group_id as Group_group_ID, groups.group_name
FROM $table_name
INNER JOIN groups
ON teams.group_id = groups.group_id
這就是為什么您缺少數據的原因: http : //dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html
簡單地將mySQL組的擴展按行為必須謹慎使用。 您必須按返回的所有列進行分組,這將導致唯一的行,或者您將讓服務器“可以從每個組中選擇任何值”
... MySQL擴展了GROUP BY的使用,以便選擇列表可以引用未在GROUP BY子句中命名的非聚合列。 這意味着前面的查詢在MySQL中是合法的。 您可以使用此功能來避免不必要的列排序和分組,從而獲得更好的性能。 但是,這主要在每個未聚合列中未在GROUP BY中命名的所有值對於每個組都相同時才有用。 服務器可以從每個組中自由選擇任何值,因此,除非它們相同,否則選擇的值是不確定的。 ...
如果您不介意結果中有多余的數據,可以使用以下方法:
SELECT gr.group_name, gr.group_id, t.team_name, t.team_id FROM teams t
LEFT JOIN groups gr ON gr.group_id = t.group_id
ORDER BY gr.group_id, t.team_id
結果如下:
group_name group_id team_name team_id
group_one 50001 team_one 10001
group_one 50001 team_two 10002
group_two 50002 team_three 10003
group_two 50002 team_four 10004
group_three 50003 team_five 10005
group_three 50003 team_six 10006
group_four 50004 team_seven 10007
group_four 50004 team_eight 10008
我了解它基本上可以將您的整個桌子放到那里。 您可以使用“ where”過濾您的組。。或者運行查詢,一個查詢組,然后查詢其中的每個團隊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.