计算项目并显示它们

时间:2014-05-01 10:03:11

标签: mysql sql

我想编写一个查询,该查询返回包含我选择的项目的框列表,并按照我选择的内容显示它们。如果我选择Item1,Item2和Item3,我希望看到的结果是:

BoxA, 3 , Item1
BoxA, 3 , Item2
BoxA, 3 , Item3
BoxB, 2 , Item2
BoxB, 2 , Item3

这意味着BoxA有3个我选择的项目,项目是Item1,Item2,Item3。 我无法找到一种方法来进行单一查询。我所能做的就是(注意我使用id而不是项目名称,只是为了简单。添加项目名称很简单。):

 SELECT b.name,count(*) cnt, ib.i_id 
 FROM boxes b, items_boxes ib 
 WHERE b.id=ib.b_id and ib.i_id in (1,2,3,4) 
 GROUP BY b.id 
 ORDER BY cnt DESC;

此查询返回Box名称及其中的项目计数,而项目(或i_id)只是第一个。 我如何获得我需要的东西?我应该选择两个吗?

sqlFiddle:example

1 个答案:

答案 0 :(得分:1)

您需要将计数作为单独的子查询进行,并将其与结果相结合。

SELECT
  b.name,
  ibc.cnt,
  ib.i_id
FROM
  boxes         b
INNER JOIN
  items_boxes   ib
    ON b.id = ib.b_id
INNER JOIN
(
  SELECT b_id, COUNT(*) cnt
    FROM items_boxes
   WHERE i_id IN (1,2,3,4)
GROUP BY b_id
)
  ibc
    ON b.id = ibc.b_id
WHERE
  ib.i_id IN (1,2,3,4)

要考虑没有项目的方框,只需将INNER JOIN转入LEFT JOIN s。

编辑:

添加了上述代码的SQL Fiddle示例。 SQL名称在SQL Fiddle中略有不同,因此SQL已经在那里进行了修改以反映出来。

http://sqlfiddle.com/#!2/1d925/7