От новичка до гуру: Курсы программирования на CyberDuff

Подсчет строк с определенным условием в агрегированном запросе

У меня есть этот запрос, чтобы получить количество PlayerSession с reconnect = TRUE, сгруппированных по Player.country:

SELECT
    country,
    COUNT(*) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
WHERE reconnect = TRUE
GROUP BY country

Я хотел бы изменить его, чтобы отображать не только количество повторно подключенных сеансов, но и общее количество, например:

SELECT
    country,
    COUNT(*) AS total,
    (COUNT WHERE reconnect = TRUE) AS with_reconnect
FROM PlayerSession S LEFT JOIN Player P ON (P.id = S.player_id)
GROUP BY country

Возможно ли это, и если да, то каков правильный синтаксис?



Ответы:


1

Достаточно будет следующего

SELECT
    p.country,
    COUNT(*) AS total,
    SUM(IF(s.reconnect=TRUE,1,0)) AS with_reconnect
FROM PlayerSession s

INNER JOIN Player p
ON p.id = s.player_id

GROUP BY p.country

Я просто переписал запрос. У вас всегда будет строка Player для каждого PlayerSession, поэтому измените ее на INNER JOIN. Также CONCAT не нужен, так как в этом запросе всегда будут строки PlayerSession (если нет сеансов).

22.02.2012
  • Хм, кажется, скобки не совпадают. 22.02.2012
  • Извините за это, слепота скобок, исправлено :) 22.02.2012
  • В одном быстром тесте я обнаружил, что показанный здесь метод SUM(IF()) работает быстрее, чем метод COUNT(CASE), показанный в принятом ответе. 28.03.2012

  • 2
  • Большое спасибо. Искал это с 3 часов :) 28.05.2020

  • 3
  • ELSE NULL является избыточным, если вы не укажете ELSE, результатом будет NULL, однако это довольно тривиально, и я являюсь поклонником использования COUNT, а не SUM(CASE WHEN ... THEN 1 ELSE 0 END), когда желаемым результатом является количество, а не сумма, так что вы получили мой голос! Также измените COUNY на COUNT... 22.02.2012
  • @GarethD - я знаю, что это излишне, но так становится яснее 22.02.2012
  • Новые материалы

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..

    Как работает дистанционное парное программирование и почему оно может изменить вашу жизнь
    Серебряная пуля от одиночества и отвлекающих факторов во время обучения программированию Независимо от того, работаете ли вы или учитесь удаленно, велика вероятность, что одиночество и..

    🔥🔥👉Питон 🆚Javascript👈🔥🔥
    Сегодня Python и Javascript потрясают мир в области ИТ. Все хотят выучить Python и Javascript, чтобы получить высокооплачиваемую работу. Различные фреймворки Python и Javascript расширяют..