MySQL多重SELECT和Count查询

时间:2020-05-15 18:38:00

标签: mysql select count

您能否提出将多重选择和计数合并到一个查询中的最佳方法是什么?

例如,这里有一些来自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

1 个答案:

答案 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;