我有以下查询来获取每个formId的条目数:
SELECT DISTINCT
formId,
COUNT(entryID)
FROM approvalDetails
GROUP BY formId;
我想扩展此查询以从另一个表中拉出与formId关联的userEmail(表#2称为首选项)
我尝试过以下操作,但计数值看起来不正确。
SELECT approvalDetails.formId,
COUNT(approvalDetails.entryID),
preferences.userEmail
FROM approvalDetails
INNER JOIN preferences ON approvalDetails.formId = preferences.formId
GROUP BY approvalDetails.formId,
preferences.userEmail;
示例数据
表1 - approvalDetails
formId entryId
- -
1 1
1 2
1 3
2 4
3 5
表2 - 首选项(电子邮件地址不是formId独有的)
formId userEmail
- -
1 email1
2 email2
3 email3
3 email4
3 email4
需要输出
formId Count (entryID) userEmail
- - -
1 3 email1
2 1 email2
3 1 email3
3 1 email4
答案 0 :(得分:1)
SELECT ap.formId,
ap.entryID,
preferences.userEmail
FROM
(
SELECT formId,
COUNT(entryID) entryID
FROM approvalDetails
GROUP BY formId
) ap
INNER JOIN preferences ON ap.formId = preferences.formId
GROUP BY ap.formId,
preferences.userEmail;
答案 1 :(得分:0)
当您使用实际变为等于加入的内部联接时。 Equi join与来自参与join的所有表的匹配行相交。 所以它将形成虚拟表,根据连接将具有行公共, 因此,如果第一个表有10行而另一个表有5行。但是如果连接条件匹配4行,那么生成的虚拟表只有4行。
所以我认为你的计数聚合列只显示匹配的行。
请根据您的要求使用适当的左外连接或右外连接。
答案 2 :(得分:0)
您可以从派生表格中的表格distinct
中选择formId
emailId
和preferences
,然后将其加入表approval_Details
,如下所示。
SELECT t1.formId,
count(EntryId) as EntryIdCount,
t2.userEmail
FROM approvalDetails t1
JOIN
(SELECT DISTINCT formId,
userEmail
FROM preferences) t2 ON t1.formId = t2.formId
GROUP BY t1.formId,
t2.userEmail
<强>结果:强>
formId EntryIdCount userEmail
---------------------------------
1 3 email1
2 1 email2
3 1 email3
3 1 email4
<强> DEMO 强>