0

这有点难以解释,所以我要一步一步来

我创建了一个名为 list_names 的表,其中存储了名称列表,例如(George、Tina、Bobby 等......)

我还创建了另一个名为 names_items 的表,这个表基本上是我存储这个人有多少项目的地方,它看起来像这样:

id | name | Item
1  | Tina | Bag
2  | Tina | Pencil
3  | Bob  | TV
4  | Bob  | Computer

我的目标是,显示 list_names 中的所有名称,然后计算每个人从 names_items 中获得的项目的总和并将它们连接在一起。如果此人还没有购买任何东西,则返回 0。我还想按此人购买的物品的总和对结果进行排序。有没有办法只使用mysql来完成这个?

4

3 回答 3

2

如果我理解正确,应该这样做;

SELECT names.name, COUNT(item) AS items
FROM names
LEFT JOIN names_items 
  ON names.name = names_items.name
GROUP BY names.name
ORDER BY COUNT(item) DESC

一个用于测试的 SQLfiddle

于 2013-06-30T06:16:29.513 回答
1

names当然,只需在and之间使用左连接names_items

SELECT names_items.name COUNT(item) AS itemcount
FROM names
LEFT JOIN names_items ON names.name = names_items.name
GROUP BY names_items.name
ORDER BY itemcount DESC

如果名称没有项目,则相应的项目将为NULL并将COUNT(item)返回0

于 2013-06-30T06:11:06.570 回答
0
SELECT 
  list_names.name,
  names_items.item,
  COUNT(names_items.name) AS `Count Per Person` 
FROM
  list_names 
  INNER JOIN names_items 
    ON (list_names.id = names_items.id) 
GROUP BY names_items.name 
于 2013-06-30T06:17:11.803 回答