Объединить количество строк в MySQL - PullRequest
0 голосов
/ 26 июня 2010

У меня в MySQL есть таблица, которая выглядит примерно так:

value | count
-------------
Fred  | 7
FRED  | 1
Roger | 3
roger | 1

То есть он был создан с использованием строковых операций вне MySQL, поэтому значения чувствительны к регистру и конечному пробелу.

Я хочу, чтобы это выглядело так:

value | count
-------------
Fred  | 8
Roger | 4

То есть управляется MySQL с value первичным ключом. Неважно, какой (из «Фред» или «Фред») хранится.

Я знаю, как это сделать в коде. Я также знаю, как создать список значений проблем (с самостоятельным объединением). Но я хотел бы придумать обновление / удаление SQL для переноса моей таблицы, и я ничего не могу придумать.

Если бы я знал, что ни у одной пары записей не было вариантов одного значения с одинаковым количеством (например, ("Fred", 4) и ("FRED", 4)), то я думаю, что могу сделать это самостоятельно -соединим, чтобы скопировать счетчики, а затем обновить, чтобы удалить нули. Но у меня нет такой гарантии.

Есть что-то простое, что я упускаю, или это один из тех случаев, когда вы просто пишете короткую функцию вне базы данных?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 июня 2010

В качестве примера того, как получить результаты, которые вы ищете, только с помощью SQL-запроса:

SELECT UPPER(value) AS name, SUM(count) AS qty FROM table GROUP BY name;

Если вы создаете новую таблицу для хранения правильных значений, вы ВСТАВЛЯЕТЕ вышеуказанный запрос, чтобы заполнить новую таблицу следующим образом:

INSERT INTO newtable (SELECT UPPER(value) AS name, SUM(count) AS qty FROM table GROUP BY name);
1 голос
/ 26 июня 2010

Как ни странно, MySQL, кажется, делает это для вас.Я только что проверил это в MySQL 5.1.47:

create table c (value varchar(10), count int);
insert into c values ('Fred',7), ('FRED',1), ('Roger',3), ('roger',1);

select * from c;

+-------+-------+
| value | count |
+-------+-------+
| Fred  |     7 |
| FRED  |     1 |
| Roger |     3 |
| roger |     1 |
+-------+-------+

select value, sum(count) from c group by value;

+-------+------------+
| value | sum(count) |
+-------+------------+
| Fred  |          8 |
| Roger |          4 |
+-------+------------+

Я был удивлен, увидев, что MySQL преобразует подобные строки, и я не уверен, что могу объяснить, почему это произошло.Я ожидал получить четыре разных строки и использовать некоторые строковые функции для отображения значений в каноническую форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...