Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在同一个表上进行4次查询,是更好的方法吗?_Sql_Mysql_Query Optimization - Fatal编程技术网

Sql 在同一个表上进行4次查询,是更好的方法吗?

Sql 在同一个表上进行4次查询,是更好的方法吗?,sql,mysql,query-optimization,Sql,Mysql,Query Optimization,目前我正在做一个查询,有3个子查询, 所有查询都在同一个表上, 所有查询都有不同的where子句 我曾经考虑过做一个小组,但是这会破坏总数() 这是一个问题 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

目前我正在做一个查询,有3个子查询,
所有查询都在同一个表上,
所有查询都有不同的where子句

我曾经考虑过做一个小组,但是这会破坏总数()

这是一个问题

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 Using where 3 SUBQUERY action_6_members ALL 1471 Using where 2 SUBQUERY action_6_members ALL 1471 Using where id选择\u类型表类型行额外 1主要行动6所有成员1471 4个子查询操作\u 6 \u成员所有1471使用where 3个子查询操作\u 6 \u成员全部1471使用where 2个子查询操作\u 6 \u成员所有1471使用where 调整这个:

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


我曾想过这样做,但后来我得到了数百行,所有行都有一个俱乐部的部分值,而且,我需要任何不以9开头的代码或分组为一个组的代码。我可以这样做:
选择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));但我还是得到了部分和值
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;