【问题标题】:SQL join two simple query with count and groupbySQL 使用 count 和 groupby 连接两个简单查询
【发布时间】:2014-07-17 19:54:24
【问题描述】:

您好,我有 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

对我来说,问题是多个计数和同一列的分组。 谢谢你

【问题讨论】:

  • 你能发布一些你的表格部分吗?

标签: sql join count group-by


【解决方案1】:

下面的查询怎么样。您只需更改 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

【讨论】:

  • 对不起,但没有解决完成我的问题,因为如果我设置 HAVING invii = 0 或 HAVING acquisti = 0 不起作用。表专业人士中的某些行可能具有 invii 或 acquisti 为零,因此我还需要提取它们...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多