Я абсолютный новичок в Oracle sql и не могу решить следующую задачу: Я даже не уверен, что группировка — это правильный путь.
У меня есть такая таблица
Как вы можете видеть, сначала он группируется по session, а на втором этапе группируется по «хешу».
Если в подгруппе есть один success = true, вся группа будет считаться успехом, в противном случае она считается неуспехом.
Я даже не могу сортировать по группам, не говоря уже о подсчете групп.
Мне нужен подход к решению этой проблемы.
Заранее спасибо.
С наилучшими пожеланиями


Вы можете 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;
Выходы:
@Denyo Тогда GROUP BY sessn, hash. Обновлено.
Спасибо, MT0, я уже модифицирую ваше решение в соответствии со своими требованиями. Я тестирую и если всё подойдёт, отмечу ваш ответ.
Привет, MT0, спасибо за быстрый ответ. Ваше решение не на 100% соответствует тому, что я ищу, но показывает мне направление, в котором я могу двигаться. Ваше решение игнорирует столбец сеанса. Вы можете увидеть это на этом примере. По данным, пунктов должно быть семь, но в ваших утверждениях всего 6: рабочий пример