开发者

`count` of subqueries

开发者 https://www.devze.com 2023-03-14 07:05 出处:网络
Please could someone help with what (i think) should be a fairly straight forward query, but I have been tearing my hair out for hours.

Please could someone help with what (i think) should be a fairly straight forward query, but I have been tearing my hair out for hours.

I have 2 tables, 'listings' and 'enquiries'.

I want to return a set of listings alongside the number of enquiries that they have received, e.g.

Listing 1 (5 enquiries) Listing 2 (3 enquiries) Listing 7 (2 enquiry)

So far, I have got:

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

But t开发者_StackOverflow社区his is only returning 1 Listing Row, with the total count of all enquiries, e.g.

Listing 1 (10 enquiries)

As you can see, enquiries are associated with Listings by having the itemtype 'listing' and itemid matching listingid.

Could anyone help me? Many thanks!


You are not grouping by l.listing_id.

Also, it makes little sense to LEFT JOIN and then filter out empty rows on the right table. You can simply INNER JOIN unless I'm missing something


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

You forget Group By - so you get number of all enquiries , and why you are using left join with HAVING num_enquiries > 0 - JOIN will do same thing. And conditions to enquiries looks better in ON part

0

精彩评论

暂无评论...
验证码 换一张
取 消