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

順序によるMysql条件グループの選択に関する問題

    追加した場合

    SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';
    

    次に、他のRDBMSがこの構文を許可しない理由がわかります。

    • SELECTには3つの非集計列がありますが、GROUPBYには1つあります
    • ORDERBY列がGROUPBY/ SELECTになく、集計されていません

    DISTINCTではなくGROUPBYを使用する場合は、SELECT

    のすべての列でGROUPBYを実行する必要があります。
    SELECT s.serviceid, s.servicenameit, s.servicenameen 
    FROM services s, kpi k, checklist_has_kpi chk 
    WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
    GROUP BY s.serviceid, s.servicenameit, s.servicenameen
    

    ただし、chk.orderはありません。 GROUPBYまたはDISTINCTのどちらを使用しているかに関係なく注文する

    では、重複を完全に無視して、これについてはどうでしょうか?

    SELECT s.serviceid, s.servicenameit, s.servicenameen 
    FROM services s, kpi k, checklist_has_kpi chk 
    WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
    ORDER BY chk.order ASC
    

    または、これを3xservicesごとの最も早い注文で注文します 列

    SELECT s.serviceid, s.servicenameit, s.servicenameen 
    FROM services s, kpi k, checklist_has_kpi chk 
    WHERE s.serviceid=k.serviceid AND k.kpiid=chk.kpiid AND k.inreport='yes' AND chk.checklistid=61 
    GROUP BY s.serviceid, s.servicenameit, s.servicenameen
    ORDER BY MIN(chk.order)
    



    1. mysql.connector.errors.ProgrammingError:1064(4200):SQL構文にエラーがあります。

    2. PKであるシーケンシャルインデックスの曲線因子

    3. クエリでエイリアスを使用すると、コマンドが正しく終了しません

    4. Oracleクエリの最適化