【问题标题】:How to get count of two fields from two different table with grouping a field from another table in mysql如何通过在mysql中对另一个表中的字段进行分组来从两个不同的表中获取两个字段的计数
【发布时间】:2015-10-14 17:10:56
【问题描述】:

我有三个表 projectsdiscussionscomments

我试过这样:

SELECT p.PRO_Name, COUNT( d.DIS_Id ) AS nofdisc, COUNT( c.COM_Id ) AS nofcom 
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
GROUP BY p.PRO_Name LIMIT 0 , 30 

但它从discussions 中获取所有行,comments 的计数与discussions 的计数相同。

【问题讨论】:

  • 您期望的结果是什么?我认为您想将SELECT 放入SELECT
  • 我想要项目对应的总讨论和讨论对应的总 cmets。我已经检查了这个链接“stackoverflow.com/questions/16134794/…”但逻辑不清楚..

标签: mysql sql select count


【解决方案1】:

count 计算给定参数的非null 值的数量。您拥有的连接将为每个评论创建一行,其中dis_idcom_id 不是null,因此它们的计数是相同的。由于这些是 ID,您只需计算 distinct 的出现次数即可获得所需的响应:

(编辑:根据 cmets 中的请求添加了 order by 子句)

SELECT    p.PRO_Name, 
          COUNT(DISTINCT d.DIS_Id) AS nofdisc,
          COUNT(DISTINCT c.COM_Id) AS nofcom 
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 
GROUP BY  p.PRO_Name
ORDER BY  2,3 
LIMIT     0 , 30

【讨论】:

  • 从未见过独特的内部计数功能,但工作起来就像一个魅力..谢谢穆雷尼克。你能告诉我是否可以通过 DIS_Id 或 COM_Id 的计数来订购
  • order 子句中的 1、2 是什么,1 表示 DIS_Id 和 2 表示 COM_Id 这样的......??
  • @user3921707 arg,这是一个错误,应该是 order by 2, 3(已经修复)。如您所料,这些是指选择列表的序数。 2 是第 2 列,nofdisc,3 是第 3 列,nofcom
  • 另一个疑问,如果我试图从讨论中获得最大的日期,那么像 GREATEST(d.DIS_Date, c.COM_Date) 这样的 cmets 会获取解决方案
猜你喜欢
  • 2017-04-10
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 2013-09-12
  • 2014-11-29
  • 1970-01-01
相关资源
最近更新 更多