Количество SQL или максимальное (sqlite)

Таблица такая:

ratio|user
  0.1|2
  0.3|2
  1  |2
  1  |2
  0.4|3
  0.7|3

Запрос должен возвращать для каждого пользователя либо число раз, когда отношение равно 1, либо, если для этого пользователя нет отношения 1, максимальное соотношение. Итак, учитывая приведенную выше таблицу, запрос должен вернуть:

2|2
3|0.7

потому что есть два значения "1" для отношения для пользователя 2, а самое высокое соотношение для пользователя 3 составляет 0,7.

На данный момент у меня есть select user,count(ratio) from table where ratio = 1 group by user;, но, очевидно, это не соответствует второй части требования. Должен ли я сделать подтаблицу, уже заполненную результатом этого первого запроса...?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
20
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте выражение CASE, чтобы выбрать между количеством и максимальным значением:

SELECT user, CASE WHEN SUM(ratio = 1) > 0
                  THEN SUM(ratio = 1) ELSE MAX(ratio) END AS ratio
FROM yourTable
GROUP BY user;

Ааа спасибо! В сумме есть условное выражение ... На самом деле, если вы не возражаете против дополнительного столбца в результате, это также можно записать как select user, sum(ratio=1), max(ratio) from table group by user;, что, возможно, легче читать.

Ken 06.05.2022 10:39

Я думаю, что это можно сделать в 2 этапа, например:

select user,count(ratio) as column2 from table where ratio = 1 group by user
union 
select user,max(ratio) as column2 from table where ratio <> 1 group by user

Другие вопросы по теме