Этот запрос:
SELECT COUNT(*) as cnt, otp_code, otp_validity
FROM otp
WHERE otp_mem = :mem
Почему? Ваш запрос является запросом агрегирования, потому что он имеет COUNT(*)
. Но otp_code
и otp_validity
находятся в SELECT
, но не в GROUP BY
.
Предположительно, вы намереваетесь выполнить следующее:
SELECT COUNT(*) as cnt, otp_code, otp_validity
FROM otp
WHERE otp_mem = :mem
GROUP BY otp_code, otp_validity;
Это возвращает одну строку для каждой пары otp_code
/ otp_validity
с подсчетом для этой пары.
Или:
SELECT COUNT(*) OVER () as cnt, otp_code, otp_validity
FROM otp
WHERE otp_mem = :mem;
Это возвращает каждую строку с общим количеством строк, возвращенных запросом.
Или:
SELECT COUNT(*) as cnt, MIN(otp_code), MIN(otp_validity)
FROM otp
WHERE otp_mem = :mem
GROUP BY otp_code, otp_validity;
Это возвращает одну строку с образцом значения из других столбцов.