sql >> データベース >  >> RDS >> Mysql

単一の列の評価を計算するための複雑なSQLSELECT

    アイデアは、サブクエリを使用して合計を計算し、計算を実行して、値を単一のコンマ区切りの列に配置することです。これは、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
    



    1. postgresql関数またはトリガーからhttpリクエストを送信するにはどうすればよいですか?

    2. SQLServerで使用できるさまざまな種類の制約-SQLServer/T-SQLチュートリアルパート50

    3. ORA-08177:このトランザクションのアクセスをシリアル化できません

    4. SQLクエリに重複はありません