Sql 按2个表中的2个参数分组

Sql 按2个表中的2个参数分组,sql,group-by,Sql,Group By,我在这个网站上的第一个问题很简单 是否可以使用SQLGROUP BY和两个表中的两个参数 SELECT DISTINCT COUNT(a.id), b.id FROM table a LEFT JOIN table b GROUP BY a.id, b.id 我添加我的完整请求 SELECT DISTINCT e.PkID, e.LocID, e.LocationName, l.Name, e.LocationCity, l.City, e.Title, l.Des

我在这个网站上的第一个问题很简单

是否可以使用SQL
GROUP BY
和两个表中的两个参数

SELECT 
  DISTINCT COUNT(a.id), 
  b.id 
FROM 
  table a 
  LEFT JOIN table b 
GROUP BY a.id, b.id
我添加我的完整请求

SELECT DISTINCT e.PkID, e.LocID, e.LocationName, l.Name, e.LocationCity, l.City, e.Title, l.Descript, e.Description, e.LocID, e.LocationName, e.StartDate, e.StartTime, e.EndTime, e.TBD, c.CategoryName, Count(e.PkID), ec.CategoryID, l.PkID
                FROM events e
                        LEFT JOIN eventcategories ec ON (ec.EventID = e.PkID)
                        LEFT JOIN categories c ON (ec.CategoryID = c.PkID)
                        LEFT JOIN locations l ON (e.LocID = l.PkID)
                    WHERE DATE(StartDate) >= DATE(CURDATE()) AND l.IsActive = 1
                    GROUP BY " . $Group . "
                    ORDER BY " . $Order . "
                    ;

$Group = $Order = 'l.Name';
我显示多个l.名称,每个l.名称包含已组织的已计数事件数(如PKiD)


每个事件都有一个或多个类别,当我只有一个类别时,它是正确的计数,但当我在一个位置有一个事件,有3个类别时,它计数为3,而不是1(事件)

要计数
a.id
b.id
,您可以使用类似于:

SELECT  b.id
,       count(a.id)
from    TableB b
left join
        TableA a
on      a.bid = b.id

其中
TableA.bid
是一个外键,它引用
TableB(id)
虽然您没有提到查询应该做什么,但很难猜测。对您的问题的一般回答是“是的,您可以通过两个参数对
分组”。这将创建一个表格,遍历所有可能的
a.id
b.id
对。这就是你问题的答案

现在,返回到您的查询,它是错误的(只要您不解释您实际想要对它做什么),因为按
a.id
分组总是将
COUNT(a.id)
作为0或1,并且
DISTINCT
将只为
COUNT(a.id)
选择唯一的值;我怀疑这是预期的行为

编辑:使用新查询编辑问题后。现在我想你根本不需要两个
分组。您要对每个事件进行多次计数,因为在加入
类别时,您会得到同一事件id的多条记录。您只需要有一个不同的计数:

COUNT(DISTINCT e.PkID) .... GROUP BY " . $Group . "

你在这个网站上得到的第一个答案也很简单:找到答案的最好方法是在你选择的RDBMS中尝试:)(答案也是“是”)。我忘了问怎么做了?:)来吧,只需运行查询和检查;)它工作起来就像解释我的查询工作一样?a.id和b.id是两种不同的东西。你在这里说的是什么平台?我不知道有哪个平台在两个参数的分组下不起作用。。。我可以想出一些(可能的)计算零的差异,如果我错了,请纠正我。