Выберите вершину (из 0 и 1) из нескольких записей, используя SQL для переполнения стека

Существует таблица контрольных списков, чтобы указать, был ли элемент собран.

Очень простая структура с четырьмя полями Code, Object, User, Got.

Доступно до 8 пользователей.

Пример:-

Code    Object      User    Caught
id01    Cheese      JS      1
id01    Cheese      DF      1
id01    Cheese      AB      0
id02    Bread       JS      0
id02    Bread       DF      0
id02    Bread       AB      0
id03    Milk        JS      0
id03    Milk        DF      1
id03    Milk        AB      0

…и так далее.

Я знаю, что реляционная БД будет лучше.

Я использую код: —

SELECT Code, Caught, Max(Caught) FROM Checklist GROUP BY Code

Но это не возвращается правильно. Мне нужно, чтобы получить только одну запись для каждого элемента, который был проверен любым из пользователей.

Таким образом, желаемый код вернется:

Code    Object    Caught
id01    Cheese    1
id02    Bread     0
id03    Milk      1

Обнадеживающим конечным результатом было бы поместить в скрипт php и показать все элементы в списке, которые по крайней мере кто-то проверил.

0

Решение

Просто нужно изменить свой SELECT а также GROUP BY немного:

SELECT Code,Object, Max(Caught) AS Caught
FROM Table1
GROUP BY Code,Object

Демо-версия: SQL Fiddle

Так как вы принимаете MAX из Caughtисключаешь Caught от твоего SELECT список, и вы хотите Object в вашем GROUP BY так как это неагрегированное поле в вашем SELECT список.

1

Другие решения

Ты пытался:

SELECT DISTINCT Code, Caught, Max(Caught) FROM Checklist
-1

По вопросам рекламы [email protected]