Если вы используете пункт having
, вы фактически потеряете эти записи. Поэтому вы не можете использовать предложение having
. Кроме того, если вы используете OR
s, то у вас не будет условий, которые приведут к true
.
Итак, вы должны использовать производную таблицу, которая содержит все сгруппированные значения. После этого запросите эту таблицу, чтобы получить подсчеты каждого из них. Однако это решение даст вам три столбца вместо трех строк. Давайте для этого тот, который легче один:
SELECT
SUM(condition_one) condition_one,
SUM(condition_two) condition_two,
SUM(condition_three) condition_three
FROM (
SELECT * FROM t
GROUP BY j
) final
Обратите внимание, что condition_one
действительно состояние, такие как age = 23
, но условия в MySQL вернуться 0
для false
и 1
для true
так что вы можете SUM
условиях.
Теперь, если вы хотите иметь их в ряды, это немного сложнее, потому что вам придется UNION
каждое значение независимо:
SELECT 'condition_one: ' Condition, SUM(condition_one) ConditionCount FROM (
SELECT * FROM t GROUP BY j
) s1
UNION ALL
SELECT 'condition_two: ', SUM(condition_two) FROM (
SELECT * FROM t GROUP BY j
) s2
UNION ALL
SELECT 'condition_three: ', SUM(condition_three) FROM (
SELECT * FROM t GROUP BY j
) s3
Или, по крайней мере, это самый лучший способ, которым я могу думать прямо сейчас. Надеюсь это поможет!
Таким образом, существует двусмысленная часть этого вопроса. Вы пытаетесь подсчитать общее количество отдельных записей, которые удовлетворяют каждому условию перед группой? Или количество записей после группы? Поскольку после применения группы by, у вас остается только одна запись для каждого отдельного значения j. Поэтому, если вы хотите подсчитать, сколько значащих значений j существует, где по крайней мере одна запись с этим значением j также соответствует каждому условию, это намного отличается от подсчета общего количества фактических записей перед группой. Я могу дать решения для обоих, если вы можете сказать, что вам нужно. – Jim