0

2 私は 2 つのテーブルを持っています

1 つの logs.emails:

EmailNum  EmployeeID,   Emailcontent,  EmailReceivers    ,is_read
  1          1       ,   "sasa"     ,   "sas@google.com" ,1
  2          1       ,   "sasa"     ,   "sas@google.com" ,0
  3          2       ,   "sasa"     ,   "sas@google.com" ,0
  4          2       ,   "sasa"     ,   "sas@google.com" ,0
  5          2       ,   "sasa"     ,   "sas@google.com" ,0

および Employees.user

id, FirstName, LastNAme
1 , "John"   , "Brown"
2 , "Jack"   , "James"

私の希望の出力:

FirstName, LastName, NumOfUnreadEmails
John , Brown , 1
Jack , James ,3

私の試み(しかし、「ジョン、ブラウン、1」である目的の出力の最初の行は返されません):

SELECT 
    *, count(EmployeeID) as NumEmails 
FROM 
    logs.emails a
inner join 
    Employees.user b on a.EmployeeID=b.id 
group by 
    EmployeeID 
having 
    a.is_read='0'

あなたの助けに感謝します

4

3 に答える 3

3

集計を実行する前にレコードを除外しようとしているため、WHEREを使用する代わりに、ここで句を指定する必要があります。HAVINGis_read=0

また、必要なフィールドのみを取得するには、 を使用しないでください*。必要なフィールドを指定するだけです。

SELECT 
    b.FirstName, b.LastName, COUNT(a.EmailNum)
FROM 
    logs.emails a
inner join 
    Employees.user b on a.EmployeeID=b.id 
where 
    a.is_read='0'
group by 
    b.id 
于 2013-07-23T17:57:08.323 に答える
1

これにより、電子メールをまったく持っていない従業員を含むすべての従業員が返されます。未読メールがあるものだけを表示したい場合は、 に変更できLEFT JOINますINNER JOIN

SELECT 
  u.FirstName,
  u.LastName,
  COUNT(e.EmployeeID) AS NumOfUnreadEmails
FROM
  Employees.user u
  LEFT JOIN logs.emails e ON e.EmployeeID = u.id AND e.is_read = 0
GROUP BY
  u.id
于 2013-07-23T17:57:22.307 に答える