【问题标题】:Mysql multiple SELECT and Count queryMysql 多个 SELECT 和 Count 查询
【发布时间】:2020-05-15 18:38:00
【问题描述】:

您能否建议将多项选择和计数组合到一个查询中的最佳方式

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

sum(case when destination-value = '1234' then 1 else 0 end) AS unallocated

【问题讨论】:

  • 大家有什么想法吗?

标签: mysql select count


【解决方案1】:

您可以使用条件聚合来做到这一点:

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;

【讨论】:

  • 您能否就第四个计数查询提出建议,尝试添加到此查询但出现错误 SELECT city_name, COUNT(CASE WHEN country_prefix = '44' AND area_code = '203' THEN 1 ELSE 0 END ) AS 总体而言,COUNT(CASE WHEN country_prefix = '44' AND area_code = '203' AND removed = '1' AND destination-value = '880000' THEN 1 END) AS unallocated , COUNT(CASE WHEN country_prefix = '353 ' AND area_code = '203' AND not-removed = '1' AND destination-value = '880000' THEN 1 END) AS Added, COUNT(CASE WHEN destination-value = '880000' AND notes IS NULL) AS @ 987654329@ FROM test_table GROUP BY city_name;
  • 我想说的是,当任何东西带回结果时,笔记很有价值
  • 如果destination-value 和not-removed 是列名,则将它们括在反引号内。如果错误仍然存​​在,请在此处发布。
  • COUNT(CASE WHEN destination-value = '880000' AND notes IS NULL) AS Seclusion FROM test_table GROUP BY city_name;
  • 在最后一个 COUNT 中您还缺少 THEN 1 END
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2014-01-18
  • 1970-01-01
相关资源
最近更新 更多