`count`子查询

时间:2011-06-20 12:03:49

标签: mysql

请有人帮忙解决(我认为)应该是一个相当直接的问题,但我已经把头发弄了好几个小时。

我有2个表,'列表'和'查询'。

我希望返回一组列表以及他们收到的查询数量,例如

清单1(5个查询) 清单2(3个查询) 清单7(2个查询)

到目前为止,我有:

SELECT l.listing_id, COUNT(e.enquiry_id) AS num_enquiries 
FROM listings AS l LEFT JOIN enquiries AS e ON l.listing_id = e.enquiry_itemid 
WHERE e.enquiry_itemtype='listing' AND enquiry_datesent >= '2011-01-1 0:01' AND enquiry_datesent <= '2011-12-31 23:59' 
HAVING num_enquiries > 0 
ORDER BY listing_title_e

但这只返回1个列表行,包含所有查询的总数,例如

清单1(10个查询)

正如您所看到的,通过将商品类型“列表”和itemid与listingid匹配,查询与商家信息相关联。

有人能帮帮我吗?非常感谢!

2 个答案:

答案 0 :(得分:3)

您不是按l.listing_id分组。

此外,LEFT JOIN然后过滤掉右表上的空行也没什么意义。您可以简单地INNER JOIN,除非我遗漏了某些内容

答案 1 :(得分:1)

SELECT l.listing_id, COUNT(e.enquiry_id) AS num_enquiries 
FROM listings AS l JOIN enquiries AS e ON l.listing_id = e.enquiry_itemid AND    e.enquiry_itemtype='listing' AND enquiry_datesent >= '2011-01-1 0:01' AND enquiry_datesent <= '2011-12-31 23:59' 
GROUP BY l.listing_id
ORDER BY listing_title_e

您忘记了分组依据 - 因此您可以获得所有查询的数量,以及为什么您使用左边的加入与HAVING num_enquiries&gt; 0 - JOIN会做同样的事情。查询的条件在ON部分看起来更好