您能否提出将多重选择和计数合并到一个查询中的最佳方法是什么?
例如,这里有一些来自test_table的查询,并且可以独立运行
SELECT name, count(*) AS 'Overall' FROM test_test WHERE country_prefix = '44' AND area_code = '203' GROUP BY `city_name`;
SELECT name, count(*) AS 'unallocated' FROM test_tab le WHERE country_prefix = '44' AND area_code = '203' AND removed != '1' AND destination-value = '1234' GROUP BY `city_name`;
我还会运行一些查询,但是我认为如果两个人在一起工作得不好,其余的将无法完成
我在想这样的事情:
SELECT name, (SELECT count(*) FROM test_table WHERE country_prefix = '44' AND area_code = '203' GROUP BY `city_name') AS "Overall", (SELECT count(*) AS 'unallocated' FROM test_table WHERE country_prefix = '44' AND city_code = '203' AND removed != '1' AND destination-value = '1234' GROUP BY 'city_name')
但不幸的是,这不起作用
做到这一点的最佳方法是使用总和大小写,例如:
sum(case when destination-value = '1234' then 1 else 0 end) AS unallocated
答案 0 :(得分:0)
您可以通过条件聚合来做到这一点:
SELECT city_name,
COUNT(CASE WHEN country_prefix = '44' AND area_code = '203' THEN 1 END) AS Overall,
COUNT(CASE WHEN country_prefix = '44' AND area_code = '203' AND removed != '1' AND destination-value = '1234' THEN 1 END) AS unallocated
FROM tablename
GROUP BY city_name;
或者因为这两种情况包含共同的条件,所以可以将这些条件移到WHERE
子句中:
SELECT city_name,
COUNT(*) AS Overall,
COUNT(CASE WHEN removed != '1' AND destination-value = '1234' THEN 1 END) AS unallocated
FROM tablename
WHERE country_prefix = '44' AND area_code = '203'
GROUP BY city_name;
在Mysql中,可以使用函数SUM()
而不是COUNT()
来简化代码:
SELECT city_name,
COUNT(*) AS Overall,
SUM(removed != '1' AND destination-value = '1234') AS unallocated
FROM tablename
WHERE country_prefix = '44' AND area_code = '203'
GROUP BY city_name;