Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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
Mysql 子查询返回多行?_Mysql_Subquery - Fatal编程技术网

Mysql 子查询返回多行?

Mysql 子查询返回多行?,mysql,subquery,Mysql,Subquery,这是我的代码,但我需要groupby选项,因为我需要按Derparti对子查询进行分组,例如,我需要找到每个科室的医生人数,因此我需要子查询返回多行 SELECT d.Dreparti, (SELECT avg(Paga) FROM dpaga dp WHERE d.titulli=dp.titulli GROUP BY Dreparti), (SELECT COUNT(*) FROM Doktori GROUP BY Dreparti), (SELEC

这是我的代码,但我需要groupby选项,因为我需要按Derparti对子查询进行分组,例如,我需要找到每个科室的医生人数,因此我需要子查询返回多行

SELECT d.Dreparti,
  (SELECT avg(Paga)
   FROM dpaga dp
   WHERE d.titulli=dp.titulli
   GROUP BY Dreparti),
  (SELECT COUNT(*)
   FROM Doktori
   GROUP BY Dreparti),
  (SELECT COUNT(*)
   FROM doktori d,
        Hospitalizimidata hd
   WHERE d.did=hd.did
   GROUP BY Dreparti),
  (SELECT sum(CmimipaTVSH)
   FROM faturat f,
        hospitalizimidata h,
        doktori d
   WHERE f.hid=h.hid
     AND h.did=d.did
     AND DataFatures BETWEEN CAST(CURDATE() - INTERVAL 365 DAY AS DATE) AND CAST(curdate() AS DATE)
   GROUP BY Dreparti) ,
  (SELECT sum(Cmimi)
   FROM faturat f,
        hospitalizimidata h,
        doktori d
   WHERE f.hid=h.hid
     AND h.did=d.did
     AND DataFatures BETWEEN CAST(CURDATE() - INTERVAL 365 DAY AS DATE) AND CAST(curdate() AS DATE)
   GROUP BY Dreparti) ,
  (SELECT sum(Cmimi)
   FROM pagesat p,
        faturat f,
        hospitalizimidata h,
        doktori d
   WHERE f.hid=h.hid
     AND h.did=d.did
     AND p.fid=f.fid
     AND DataFatures BETWEEN CAST(CURDATE() - INTERVAL 365 DAY AS DATE) AND CAST(curdate() AS DATE)
   GROUP BY Dreparti)
FROM doktori d
GROUP BY Dreparti;

您需要将子查询作为派生表从“选择”列表移动到“从”列表。使用表/查询作为第一个返回所有(或至少大多数)部门的表/查询,并使用departments字段在tge first one上左键联接其他派生表。假设doctors表包含所有科室,我将为您提供3个子查询的示例代码:

SELECT * FROM
  (SELECT Dreparti, COUNT(*) AS NoOfDoctors
   FROM Doktori
   GROUP BY Dreparti) t1
  LEFT JOIN (SELECT Dreparti, avg(Paga) AS AvgPaga
   FROM dpaga dp inner join Doktori d
   ON d.titulli=dp.titulli
   GROUP BY Dreparti) t2 ON t1.Dreparti=d2.Dreparti
  LEFT JOIN (SELECT Dreparti, COUNT(*) AS NoOfSomething
   FROM doktori d INNER JOIN
        Hospitalizimidata hd
   ON d.did=hd.did
   GROUP BY Dreparti) t3 ON t1.Dreparti=t3.Dreparti

但是,我会使用部门的主数据表作为最左边的表。因为你没有提到它,所以我没有把它包括在内。

你想实现什么?尽量简化您的案例,您的问题很长。请提供预期输出!我不确定是否可以在单个查询中包含所有这些查询。哪些表包含此Dreparti字段?哪个表包含所有的Dreparti值?欢迎使用堆栈溢出。您已将问题标记为和。请编辑您的问题并删除其中一个标记——它们用于不同的SQL方言。另外,请尽量减少代码示例,并指定希望得到的结果集示例。@shadowtable doktori包含Dreparti