假设我有
SELECT * FROM table t
GROUP BY j
HAVING condition_one OR condition_two OR condition_three
如何修改查询,使其返回满足条款中三个不同条件的行数的COUNT
理想情况下,输出会有类似的结果:
condition_one: 100
condition_two: 200
condition_three: 300
其中有100个项目满足condition_one,200个满足condition_two等
答案 0 :(得分:2)
SELECT
SUM(IF(condition_one,1,0)) AS condition_one,
SUM(IF(condition_two,1,0)) AS condition_two,
SUM(IF(condition_three,1,0)) AS condition_three
FROM (
SELECT * FROM t
GROUP BY j
) AS baseview
答案 1 :(得分:0)
如果使用having
子句,您实际上会丢失这些记录。所以你不能使用having
子句。除此之外,如果您使用OR
,那么您将不会在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
或者至少,这是我现在能想到的最佳方式。希望这有帮助!