mysql - 将两个 SQL 查询合二为一

标签 mysql sql select count

我如何在一个查询中执行这两个查询,以便它显示具有超过 2 个值的 eid 并显示其 eid?

select eid, count(Edited_by.eid)
from Edited_by
group by eid;


select Editor.eid  
from Editor 
where ( select count(*) 
    from Edited_by 
    where Edited_by.eid=Editor.eid ) > 2;

最佳答案

更新

<小时/>

HAVING 子句中的谓词可以对聚合表达式进行操作。我想您可能正在寻找这样的东西:

SELECT t.eid
     , COUNT(t.eid) AS cnt
  FROM Edited_by t
 GROUP BY t.eid
HAVING COUNT(t.eid) > 2
<小时/>

哎呀。我完全忽略了这两个查询引用了两个不同的表。

要同时引用 Editor 表,您可以使用上面的查询作为内联 View 。

SELECT c.eid                  AS edited_by_eid
     , c.cnt                  AS cnt
     , IF(c.cnt>2,e.Eid,NULL) AS editor_eid
  FROM Editor e
  JOIN ( SELECT t.eid
              , COUNT(t.eid) AS cnt
           FROM Edited_by t
          GROUP BY t.eid
       ) c
    ON c.eid = e.Eid
<小时/>

跟进

问:“我想通过运行一个查询来获得两个查询的结果。”

答:我不太明白您想要实现的目标。

要返回两个单独的结果集,您需要运行两个单独的语句。 MySQL 可以从存储过程返回多个结果集,例如,一个过程可以执行两个查询。客户端可以处理两个结果集(如果客户端接口(interface)库支持并启用它)。这将是一个“单个语句”(CALL my_procedure;)。

如果要连接两个单独查询的结果,可以使用 UNION ALL 集合运算符。通常,我会返回一个鉴别器列来区分哪个查询返回了哪些行。为此,两个查询之间的列数和每列的数据类型必须匹配。

在您给出的示例中,编辑器表中的查询需要返回一个虚拟整数类型列,以便连接两个结果。

SELECT t.eid
     , COUNT(Edited_by.eid) AS cnt
  FROM Edited_by t
 GROUP BY t.eid
 UNION ALL
 SELECT e.eid
      , 0 AS cnt
   FROM Editor e
  WHERE ( SELECT COUNT(*)
            FROM Edited_by c
           WHERE c.eid=e.eid 
        ) > 2

关于mysql - 将两个 SQL 查询合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23505998/

相关文章:

Mysql - 连接同一张表的数据

mysql - 定位僵尸 mySQL 连接

sql查找具有特定类型的电影

sql - 计算sql server中的平均评分

php - 如何将值从 android 传递到 php web 服务并检索它?

php - 在另一个查询中使用查询结果行

mysql - 可以获取表 1 中存在但表 2 中不存在的记录的 SQL 查询

php - 复杂的 SQL 查询,以便检索给定时间范围内与预订系统中的房间匹配的可用床位

CSS - 使用 SELECT 标签时下拉框的边框半径?不是 SELECT 输入本身,而是实际的下拉框?

多表表连接的Mysql查询问题