SQL使用count和groupby连接两个简单查询

时间:2014-05-28 14:18:00

标签: sql join count group-by

你好,我有2个问题,我想加入,但我不知道如何......

SELECT *, count(*) as invii 
FROM professionisti JOIN preventivi_invii ON 
 professionisti.email=preventivi_invii.email 
GROUP BY professionisti.email 
HAVING invii> 300


SELECT *, count(*) as acquisti 
FROM professionisti JOIN contatti_acquistati ON   
 professionisti.email=contatti_acquistati.email 
GROUP BY professionisti.email 
HAVING acquisti> 5

对我来说问题是多次计数和组相同的列。 谢谢你

1 个答案:

答案 0 :(得分:0)

以下查询如何?您只需更改WHERE子句即可满足您的需求。

SQL Fiddle Example

SELECT * FROM 
(
  SELECT p.email, 
    CASE WHEN ISNULL(m1.invii) THEN 0 ELSE m1.invii END AS invii,
    CASE WHEN ISNULL(m2.acquisti) THEN 0 ELSE m2.acquisti END AS acquisti
  FROM professionisti p
  LEFT JOIN 
  (
    SELECT pp.email, COUNT(*) AS invii 
    FROM preventivi_invii pp
    GROUP BY pp.email 
  ) AS m1 ON p.email = m1.email
  LEFT JOIN
  (
    SELECT c.email, COUNT(*) AS acquisti
    FROM contatti_acquistati c
    GROUP BY c.email 
  ) AS m2 ON p.email = m2.email
) AS mm
WHERE mm.invii = 0 
OR mm.acquisti = 0;

或者您可以使用:

SELECT * FROM
(
  SELECT p.email, 
  (
    SELECT 
    CASE WHEN ISNULL(COUNT(*)) THEN 0 ELSE COUNT(*) END
    FROM preventivi_invii pp
    WHERE pp.email = p.email
  ) AS invii,
  (
    SELECT
    CASE WHEN ISNULL(COUNT(*)) THEN 0 ELSE COUNT(*) END
    FROM contatti_acquistati c
    WHERE c.email = p.email
  ) AS acquisti
  FROM professionisti p
) AS mm
WHERE mm.invii = 0
OR mm.acquisti = 0
相关问题