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

Я абсолютный новичок в Oracle sql и не могу решить следующую задачу: Я даже не уверен, что группировка — это правильный путь.

У меня есть такая таблица

Как вы можете видеть, сначала он группируется по session, а на втором этапе группируется по «хешу». Если в подгруппе есть один success = true, вся группа будет считаться успехом, в противном случае она считается неуспехом.

Я даже не могу сортировать по группам, не говоря уже о подсчете групп.

Мне нужен подход к решению этой проблемы.

Заранее спасибо.

С наилучшими пожеланиями

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

Ответы 1

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

Вы можете GROUP BY hash а затем найти MAXминимальное success значение в группе, а затем использовать условное агрегирование по всему набору результатов для подсчета групп с каждым типом успеха:

SELECT COUNT(CASE MAX(success) WHEN 'true'  THEN 1 END) AS count_true,
       COUNT(CASE MAX(success) WHEN 'false' THEN 1 END) AS count_false
FROM   table_name
GROUP BY sessn, hash

Что для примера данных:

CREATE TABLE table_name (success, sessn, hash) AS
  SELECT 'true',  'a', 1 FROM DUAL UNION ALL
  SELECT 'true',  'a', 1 FROM DUAL UNION ALL
  SELECT 'false', 'a', 2 FROM DUAL UNION ALL
  SELECT 'false', 'a', 2 FROM DUAL UNION ALL
  SELECT 'false', 'a', 2 FROM DUAL UNION ALL
  SELECT 'true',  'b', 3 FROM DUAL UNION ALL
  SELECT 'false', 'b', 3 FROM DUAL UNION ALL
  SELECT 'true',  'c', 4 FROM DUAL UNION ALL
  SELECT 'false', 'd', 5 FROM DUAL UNION ALL
  SELECT 'false', 'd', 5 FROM DUAL UNION ALL
  SELECT 'true',  'e', 6 FROM DUAL UNION ALL
  SELECT 'false', 'e', 6 FROM DUAL UNION ALL
  SELECT 'false', 'e', 6 FROM DUAL;

Выходы:

COUNT_TRUE COUNT_FALSE 4 2

рабочий пример

Привет, MT0, спасибо за быстрый ответ. Ваше решение не на 100% соответствует тому, что я ищу, но показывает мне направление, в котором я могу двигаться. Ваше решение игнорирует столбец сеанса. Вы можете увидеть это на этом примере. По данным, пунктов должно быть семь, но в ваших утверждениях всего 6: рабочий пример

Denyo 11.06.2024 17:57

@Denyo Тогда GROUP BY sessn, hash. Обновлено.

MT0 11.06.2024 18:32

Спасибо, MT0, я уже модифицирую ваше решение в соответствии со своими требованиями. Я тестирую и если всё подойдёт, отмечу ваш ответ.

Denyo 12.06.2024 11:27

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