J'ai le tableau suivant dans mysql qui est une version réduite d'un vrai problème.Comment conserver une colonne supplémentaire après l'agrégation?
+-------+-------+-------+-------+
| a_col | b_col | c_col | extra |
+-------+-------+-------+-------+
| 1 | 1 | 1 | 7 |*
| 1 | 2 | 1 | 10 |
| 1 | 2 | 2 | 20 |*
| 1 | 3 | 2 | 20 |
| 1 | 3 | 3 | 15 |*
+-------+-------+-------+-------+
Je veux sélectionner les lignes marquées *, pour obtenir le tableau suivant:
+-------+-------+-------+-------+
| a_col | b_col | c_col | extra |
+-------+-------+-------+-------+
| 1 | 1 | 1 | 7 |
| 1 | 2 | 2 | 20 |
| 1 | 3 | 3 | 15 |
+-------+-------+-------+-------+
Si deux lignes ont la même valeur dans a_col ET b_col, puis garder celui qui a le plus grand valeur dans le c_col
Ma tentative a été:
select a_col, b_col, max(c_col), extra
from mytable
group by a_col, b_col
Mais je reçois le message d'erreur suivant :
ERROR 1055 (42000): Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'bd17_g12.mytable.extra' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
sans mentionner la colonne « extra » je reçois quelque chose à ce que je veux:
+-------+-------+------------+
| a_col | b_col | max(c_col) |
+-------+-------+------------+
| 1 | 1 | 1 |
| 1 | 2 | 2 |
| 1 | 3 | 3 |
+-------+-------+------------+
Mais je dois garder les valeurs de la colonne « extra »