同一张表上的4个查询,有更好的方法吗?

3

目前我正在进行一个查询,包含3个子查询,
所有查询都在同一张表上进行,
所有查询都有不同的where子句

我考虑过使用group by,但这会破坏SUM()的结果

以下是该查询:

SELECT SUM(club) AS club, 
(SELECT COUNT(id) FROM action_6_members WHERE SUBSTR(CODE, 1, 1) = '9') AS 5pts,
(SELECT COUNT(id) FROM action_6_members WHERE SUBSTR(CODE, 1, 1) = 'A') AS 10pts,
(SELECT COUNT(id) FROM action_6_members WHERE SUBSTR(CODE, 1, 1) NOT IN('9', 'A')) AS General
FROM action_6_members;

这里是解释

id  select_type  table             type  rows  Extra        
1   PRIMARY      action_6_members  ALL   1471               
4   SUBQUERY     action_6_members  ALL   1471  使用where条件  
3   SUBQUERY     action_6_members  ALL   1471  使用where条件  
2   SUBQUERY     action_6_members  ALL   1471  使用where条件  
2个回答

3

使用:

SELECT SUM(club) AS club, 
       SUM(CASE WHEN SUBSTR(CODE, 1, 1) = '9' THEN 1 ELSE 0 END) AS 5pts,
       SUM(CASE WHEN SUBSTR(CODE, 1, 1) = 'A' THEN 1 ELSE 0 END) AS 10pts,
       SUM(CASE WHEN SUBSTR(CODE, 1, 1) NOT IN('9', 'A') THEN 1 ELSE 0 END) AS General
  FROM action_6_members;

0

调整这个:

SELECT SUM(club) as club, COUNT(1) FROM action_6_members GROUP BY SUBSTR(CODE, 1, 1)

我曾考虑过这样做, 但最终我得到了数百行,所有的俱乐部都只有部分值,而且我需要任何不以9开头或分组的代码作为一组。 - Hailwood
我可以这样做: SELECT SUM(club) AS club, COUNT(1) FROM action_6_members GROUP BY IF(SUBSTR(CODE, 1, 1) = 9, 1, IF(SUBSTR(CODE, 1, 1) = 'A', 2, 3)); 但是最终我仍然得到了部分值的总和。 - Hailwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接