Используя Count, Group, объедините порядок, по которому он возвращает значение, но не точно

Я выполнил этот запрос:

Когда я развернул код, я понял, что он не дал мне нужного результата. ЧТО Я ХОЧУ ДОСТИГНУТЬ: ПОЛУЧИТЬ пользователей, КОТОРЫЕ ЯВЛЯЮТСЯ электронными письмами, в ПОЛЬЗОВАТЕЛЬСКИХ И ПОЛЬЗОВАТЕЛЬСКИХ УСЛОВИЯХ В УСЛОВИЯХ, КОТОРЫЕ ЕГО ПОЧТОВА ЯВЛЯЮТСЯ В ИСПОЛЬЗОВАНИИ С refcomfirm = ‘2’ и НА ОСНОВАНИЯХ, КОТОРЫЕ ОНА ИМЕЕТСЯ В studentusers.refemail <3 или studentusers.refemail = » Т.е. это не происходит вообще. ПОЖАЛУЙСТА ПОМОГИ

    SELECT studentusers.refemail, COUNT( studentusers.refemail )
FROM studentusers
LEFT JOIN useractivation ON studentusers.email = useractivation.email
WHERE useractivation.refcomfirm =  '2'
GROUP BY studentusers.refemail
HAVING COUNT( studentusers.refemail ) <3
LIMIT 0 , 500

У меня есть стол studentusers (вмещает всех пользователей)
Еще одно использование-активация (содержит все варианты использования)

Общей колонкой для обоих является электронная почта

Я хочу отображать только электронные письма, которые появляются в столбце studentusers.refemail менее 3 раз, и для useractivation.refcomfirm должно быть установлено значение 2

Но если вы посмотрите на изображение ниже, вы заметите, что электронная почта [email protected] появляется.
Изображение для возвращенного запроса

Когда я запустил поиск по адресу [email protected], он возвращает 3 строки, что означает, что он появляется 3 раза.
Посмотреть изображение
протестировано akaakapurity@gmail.com
Вернуть три строки

Я только хочу отображать электронные письма, которые появляются в обеих таблицах, но появляются в refemail меньше, чем dan три раза, а в таблице useractivation установлено значение refcomfirm, равное 2

Я надеюсь, что это достаточно ясно. спасибо за привет

-1

Решение

SELECT a.refemail, COUNT( * )
FROM studentusers a
JOIN useractivation b ON a.refemail = b.email
WHERE b.refcomfirm =  '2'
AND refemail !=  '[email protected]'
AND refemail !=  '[email protected]'
AND refemail !=  '[email protected]'
AND refemail !=  '[email protected]'
GROUP BY a.refemail
HAVING COUNT( * ) <3
ORDER BY a.id ASC
LIMIT 0 , 500
0

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

Вы хотите включить в таблицу только электронные письма, которые не встречаются 3 или более раз, даже когда эти случаи не имеют refconfirm=2. Но в текущем запросе вы учитываете только те, которые соответствуют этому условию.

Поэтому измените ваш запрос, чтобы переместить это условие в having пункт, в котором вам потребуется только хотя бы одна из подсчитанных записей для выполнения этого конкретного условия:

SELECT    studentusers.refemail, COUNT( studentusers.refemail )
FROM      studentusers
LEFT JOIN useractivation ON studentusers.email = useractivation.email
GROUP BY  studentusers.refemail
HAVING    COUNT( studentusers.refemail ) < 3
AND  COUNT( CASE WHEN useractivation.refcomfirm = '2' THEN 1 END ) > 0
LIMIT     0, 500

Смотрите, это работает на sqlfiddle.com

0

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