如果您使用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
forfalse
和1
for,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
或者至少,这是我现在能想到的最好的方式。希望这可以帮助!