Ich möchte nach t0.method
in strikte Zeichenfolge Vergleich, d. H. "GET", "GET" und "Get" in andere Gruppe, so eine BINARY
vor dem t0.method
Feld, das in der Gruppe nach Satz erscheint hinzugefügt. aber Ich kann kein BINARY
zu diesem Feld hinzufügen, das im Select-Satz erscheint, da dies ein Codierungsproblem verursachen wird, wenn Nicht-ASCII-Zeichen in den Daten erscheint.Wie "gruppieren von" in strikte String-Vergleich, wenn sql_mode = only_full_group_by in MySql gesetzt ist?
So folgenden wird die SQL-Abfrage, die ich endlich:
SELECT `t0`.`method` AS `d0`,
SUM(`t0`.`success`) AS `m0`
FROM `invoke_statistics` AS `t0`
GROUP BY BINARY `t0`.`method`
LIMIT 20000
Aber leider habe ich die folgende Fehlermeldung dann ..
Expression # 1 von SELECT-Liste ist in GROUP BY nicht Klausel und enthält nicht aggregierte Spalte 't0.method', die nicht funktional auf Spalten in GROUP BY-Klausel; dies ist unvereinbar mit sql_mode = only_full_group_by
Also, was ist der richtige Weg, dies alles mit den „sql_mode = only_full_group_by“ Dingen, ohne dass eine Codierung Problem oder Inkompatibilitätsproblem zu tun?
HINWEIS:
- Ich bin nicht in der Lage, die sql_mode Option zu ändern.
- Ich bin nicht in der Lage, sicherzustellen, dass keine nicht-ASCII-Zeichen in den Daten
- erscheint Ich kann nicht wissen, welche Zeichensatz verwendet wird, bevor eine Abfrage generiert. so dass die
collate utf8_bin
oder ähnliches ist nicht in der Lage zu arbeiten, da es einige Fehler verursachen können wieCOLLATION 'UTF8_BIN' is not valid for CHARACTER SET 'latin1'
Ich bin etwas über Code-Generierung zu tun, so die Antwort der anderen, die auf eine Menge von Annahmen abhängig nicht lösen können mein Problem, ich brauche einige allgemeine Lösung
Versuchen Sie 'SELECT t0.method COLLATE Latin1_General_CS_AS AS ... ' – sagi
Oder Google' SQL GROUP VON CASE SENSITIVE' – sagi
@sagi Ich habe gefunden [this] (http://stackoverflow.com/questions/10952696/how -to-a-case-sensitive-group-by) aber es gibt nichts hilfreiches .. – luochen1990