アイデアは、サブクエリを使用して合計を計算し、計算を実行して、値を単一のコンマ区切りの列に配置することです。これは、phpで配列に変換できます:
select v.ip, group_concat(v.visits / iv.maxvisits) as ratings
from visit v join
(SELECT ip, id, visits, max(visits) as maxvisits
FROM visit
GROUP BY ip
) iv
on v.ip = iv.ip
group by v.ip;
編集:
SQLのテーブルは本質的に順序付けされておらず、SQLでの並べ替えは安定していません(つまり、元の順序は保持されません)。 group_concat()
で順序を指定できます 声明。たとえば、次のように結果をid
で並べ替えます。 :
select v.ip, group_concat(v.visits / iv.maxvisits order by id) as ratings
from visit v join
(SELECT ip, id, visits, max(visits) as maxvisits
FROM visit
GROUP BY ip
) iv
on v.ip = iv.ip
group by v.ip;
そして、これは最初に最高の評価で並べ替えられます:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
リストをより複雑にして、id
を含めることができます。 その中にも:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings