具有多个SELECT和GROUP BY的MySQL

时间:2018-10-23 13:14:57

标签: mysql

我在mysql中的数据库有问题。我想从我的数据库中获得一个包含datepatdureePdureeC的表,但是该函数没有GROUP BY:

select * 
from (SELECT date_format(p.date, "%Y-%m") AS date
            ,p.pat
            ,AVG(a) AS dureeP 
      FROM timing as t, patient as p 
      WHERE t.id_p = p.id_p 
      AND t.pos=6 
      AND t.heure_fin IS NOT NULL 
      GROUP BY p.pat, MONTH(p.date), YEAR(p.datede)
     ) as T1,
     (SELECT AVG(b) AS dureeC 
      FROM timing as t, patient as p 
      WHERE t.id_p = p.id_p 
      AND t.pos=3 
      AND t.heure_fin IS NOT NULL 
      GROUP BY p.pathologie, MONTH(p.date), YEAR(p.date)
      ) as T2 

使用一个SELECT,我可以拥有我想要的东西,但是使用多个SELECT,我可以进行分组依据。 你有主意吗?

谢谢

1 个答案:

答案 0 :(得分:0)

为简化查询,您可能可以使用“ 条件聚合”,这基本上意味着将case expression放在aggregate function

SELECT
    p.pathologie
  , MONTH(p.date)
  , YEAR(p.date)
  , AVG(CASE WHEN t.pos = 3 THEN b END) AS dureeC
  , AVG(CASE WHEN t.pos = 6 THEN a END) AS dureeP
FROM timing AS t
INNER JOIN patient AS p ON t.id_p = p.id_p
WHERE t.heure_fin IS NOT NULL
GROUP BY
    p.pathologie
  , MONTH(p.date)
  , YEAR(p.date)