2017-01-05 15 views
0

私はこの問題について研究しましたが、解決策を見つけるのに苦労しています。MYSQL:グループ化とカウントの問題

enter image description here

がどのように私はこのような出力を得ることができますか?

enter image description here

+1

あなたは疲れているものを投稿してください。 –

+0

宿題の助けを求める方法については[こちらの記事](http://meta.softwareengineering.stackexchange.com/questions/6166/open-letter-to-students-with-homework-problems)をご覧ください。また、[allowable topics policy](http://stackoverflow.com/help/on-topic)には、「宿題の助けを求める質問には、問題を解決するためにこれまでに行ってきた作業の要約を含める必要があります。あなたがそれを解決している困難の説明。 – EJoshuaS

+0

私も研究をしました – Strawberry

答えて

0

あなたは、各学校に通う生徒を集計サブクエリにあなたの元のテーブルに参加することができます。

SELECT t1.student, 
     t2.count, 
     t1.school 
FROM yourTable t1 
INNER JOIN 
(
    SELECT school, COUNT(*) AS count 
    FROM yourTable 
    GROUP BY school 
) t2 
    ON t1.school = t2.school 
ORDER BY t2.count DESC, 
     t1.school 

あなたの意図する順序は質問からはっきりしていないことに注意してください。あなたはこの順序を探している場合があります。

select 
    yourtable.student, t.cnt as `count`, t.school 
from (
    select count(id) as cnt, school 
    from yourtable 
    group by school 
) t 
left join yourtable 
on yourtable.school = t.school 
order by t.school, yourtable.id 

するか、あなただけのすべてのためのすべての学生をしたい場合:あなたは本当にすべての学生が列に表示された場合

ORDER BY t1.school, 
     t1.count -- or t2.count DESC 
+0

あなたの時間のために余計にそれを試してみてください:) –

+0

これは 'd'学生の行を含み、' h'学生の行を倍増させません... OP結果は学生 'a' – spencer7593

+0

@ spencer7593私はそれがタイプミスだと思っていますが、そうでなければ意味がありません。 –

0

、あなたはこのようにそれを行う必要があります学校は、あなたは、学生がそれぞれの学校のために一列に,によってseparetedされますgroup_concat

select 
    group_concat(student) as student, 
    count(id) as `count`, 
    school 
from yourtable 
group by school 

を使用することができます。

+1

元のテーブルのすべての学校がサブクエリに表示されることが保証されているため、ここでは「LEFT JOIN」は必要ありません。 –

+1

@TimBiegeleisen Right、多分必要はないかもしれませんが、 'left join'も動作します:-) – Blank

+0

それも働いています:) –

関連する問題