MYSQL计数相关记录一个查询

时间:2011-12-07 02:43:40

标签: mysql sql count

所以我有一个mysql查询,查询表“联系人”然后每个联系人购买。购买在相关表格中。我想显示每个联系人姓名和他们在右边做的购买次数,如下所示:

Adam(1)
Mike(8)
Steve(3) 

我当前的sql看起来像这样:

SELECT * FROM contacts ORDER BY contacts.name ASC"

我当前的表格如下:

Adam
Mike
Steve

为了将相关(购买)表的计数拉入当前表,我知道我必须加入“购买”表一些如何然后使用GROUP BY和count()函数但我不知道如何构造这个sql语句。有人能帮我吗。

我想要做的就是列出一张桌子(联系人)并统计它的相关记录(购买)并让它看起来像这样:

Adam(1)
Mike(8)
Steve(3)

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:24)

假设purchases表有一个名为contacts的{​​{1}}表的外键,那么这样的查询应该有效:

contact_id

此查询会将计数放在单独的列中,我建议这样做。如果您必须按照您在名称后面的括号指示的方式对其进行格式化,则可以使用MySQL的concat()函数。像这样:

SELECT c.name, count(p.contact_id)
FROM contacts AS c
LEFT OUTER JOIN purchases AS p
ON p.contact_id = c.contact_id
GROUP BY c.contact_id
ORDER BY c.name ASC

答案 1 :(得分:1)

  SELECT contacts.name, COUNT(*) 
    FROM contacts, purchases 
   WHERE contacts.name = purchases.name
GROUP BY purchases.key
ORDER BY contacts.name

将WHERE子句中的.name替换为用于标识记录的密钥。

答案 2 :(得分:0)

所需的查询将是这样的(我不知道您的架构):

SELECT c.name, count(p.id) FROM contacts c
JOIN purchases p ON (c.id = p.id)
GROUP BY p.id
ORDER BY contacts.name ASC