簡體   English   中英

如何在mysql中選擇不同值的總和?

[英]How to select sum of count of distinct values in mysql?

這是我的查詢:

SELECT 
    p.PRO_Id, p.PRO_Name,
    COUNT(DISTINCT c.COM_Id) as commentCount,
    COUNT(DISTINCT d.DIS_Id) AS disCount, 
    d.DIS_ThreadDesc,
    dev.DEV_Name,
    loc.LOC_Name,
    d.USE_Id,
    d.DIS_Date
FROM projects p
LEFT JOIN discussions d ON p.PRO_Id = d.PRO_Id
LEFT JOIN comments c ON d.DIS_Id = c.DIS_Id
LEFT JOIN developer dev ON p.DEV_Id=dev.DEV_Id
LEFT JOIN locality loc ON p.LOC_Id=loc.LOC_Id
WHERE p.PRO_Status=1 
  and d.DIS_Status=1 
  and c.COM_Status=2
GROUP BY p.PRO_Id
ORDER  BY 3 desc LIMIT 3

我想得到的是commenCount(全部評論)和disCount(全部討論)的總和。
我這樣嘗試過-

sum(COUNT(DISTINCT c.COM_Id) + COUNT(DISTINCT d.DIS_Id)) AS totalResponse
但沒有機會。

您可以同時添加COUNT的結果:

SELECT 
    p.PRO_Id, p.PRO_Name,
    COUNT(DISTINCT c.COM_Id) AS commentCount,
    COUNT(DISTINCT d.DIS_Id) AS disCount, 
    COUNT(DISTINCT c.COM_Id) + COUNT(DISTINCT d.DIS_Id) AS totalResponse
    d.DIS_ThreadDesc, dev.DEV_Name, loc.LOC_Name, d.USE_Id, d.DIS_Date
FROM projects p
...

或者使用子查詢:

SELECT sub.*,
       commentCount + disCount AS totalResponse
FROM (
  SELECT 
    p.PRO_Id, p.PRO_Name,
    COUNT(DISTINCT c.COM_Id) as commentCount,
    COUNT(DISTINCT d.DIS_Id) AS disCount, 
    d.DIS_ThreadDesc,
    dev.DEV_Name,
    loc.LOC_Name,
    d.USE_Id,
    d.DIS_Date
  FROM projects p
  LEFT JOIN discussions d ON p.PRO_Id = d.PRO_Id
  LEFT JOIN comments c ON d.DIS_Id = c.DIS_Id
  LEFT JOIN developer dev ON p.DEV_Id=dev.DEV_Id
  LEFT JOIN locality loc ON p.LOC_Id=loc.LOC_Id
  WHERE p.PRO_Status=1 
   and d.DIS_Status=1 
   and c.COM_Status=2
  GROUP BY p.PRO_Id
) AS sub
ORDER BY commentCount LIMIT 3

請記住,您的SELECT列表和GROUP BY不匹配。 這將適用於MySQL但不符合ANSI標准。 您在兩個子句中都應具有相同的列表,或者對GROUP BY中未指定的列使用聚合函數。 更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM