根据categoryId显示不同的最大收藏数量

时间:2013-04-29 09:12:33

标签: mysql

我有5个表类别,商业,地铁,用户,收藏

Category
id | category_name
-------------------
 1  | bar
 2  | cafe
 3  | lunch
 4  | dinner

Business
id | business_name | zip        | address            |metro_id
--------------------------------------------------------------
1  | sanders      | 023232      | abc1               | 1
2  | ipc          | 023232      | abc2               | 1
3  | mircleFoods  | 023232      | abc3               | 1
4  | salt         | 023232      | abc4               | 2

Metro
id | name
-------------------
1  | boston
2  | newYork


Favourites
id | user_id | business_id | metro_id | category_id
----------------------------------------------------
1  | 1       | 1           | 3         | 1
2  | 1       | 1           | 4         | 2
3  | 1       | 1           | 3         | 1
4  | 1       | 1           | 5         | 2

User
id | firstName | LastName |userName   | Password
----------------------------------------------------
1  | john   | mark   | jmark1       |123
2  | john  | mark   | jmark2        | 123
3  | john   | mark  | jmark3        | 123
4  | john   | mark  | jmark4        | 123

我一直在尝试在特定城市中选择具有最高优惠次数的类别,并显示其类别最受欢迎的商家名称。

我一直希望得到结果,例如

RESULT 1{
Metro->boston
category->bar
businessName->sanders
favs->23}


RESULT 2{
Metro->boston
category->cafe
businessName->sanders
favs->333}

我尝试了很多不同的查询,但现在已经开始尝试通过分解来实现它是我尝试过的一些查询

1.    SELECT c.category_name,b.business_name,COUNT(f.user_id) FROM business b, category c, favourites f
INNER JOIN business ON business.id=favourites.business_id
INNER JOIN category ON category.id=favourites.category_id
GROUP BY c.category_name,b.business_name

2.    SELECT c.category_name,(SELECT COUNT(*) FROM favourites) AS fs,b.business_name FROM(favourites f,business b,category c) GROUP BY c.category_name LIMIT 0,1

3.    SELECT f.category_id, COUNT(f.user_id) AS f FROM (favourites f,metro m)  GROUP BY category_id HAVING MAX(f.user_id)=(SELECT COUNT(user_id) FROM favourites)

3 个答案:

答案 0 :(得分:0)

这应该有效

SELECT c.category_name,b.business_name,COUNT(c.id)
FROM favourites AS f
INNER JOIN business AS b ON business.id=favourites.business_id
INNER JOIN category AS c ON category.id=favourites.category_id
GROUP BY c.id
ORDER BY COUNT(c.id) DESC

这将计算每个类别的最喜欢的条目,并按计数DESC

进行排序

答案 1 :(得分:0)

试试这个:

SELECT
    b.business_name,
    m.name,
    c.category_name,
    favs
FROM (
    SELECT
        business_id,
        metro_id,
        category_id,
        COUNT(*) as favs
    FROM
        Favourites 
    WHERE
        metro_id = 1
    GROUP BY
        business_id,
        category_id
) as f
INNER JOIN Metro as m
    ON m.id = f.metro_id
INNER JOIN Business as b
    ON b.id = f.business_id
INNER JOIN Category as c
    ON c.id = f.category_id
ORDER BY
    favs
LIMIT 1

它应该显示“特定城市中具有最高优惠次数的类别,并显示其类别最受欢迎的商家名称。”

更新新要求“不属于同一个企业的每个类别的最大优惠。”

SELECT
    b.business_name,
    m.name,
    c.category_name,
    favs
FROM (
    SELECT
        category_id,
        business_id,
        metro_id,
        COUNT(*) as favs
    FROM
        Favourites 
    WHERE
        business_id = 1
    GROUP BY
        category_id,
        metro_id
    ORDER BY
        favs DESC
    LIMIT 1
) as f
INNER JOIN Metro as m
    ON m.id = f.metro_id
INNER JOIN Business as b
    ON b.id = f.business_id
INNER JOIN Category as c
    ON c.id = f.category_id

答案 2 :(得分:0)

根据需要替换搜索。这应该按点击正确地分类业务/类别:

SELECT COUNT(f.user_id) AS hits, c.category_name, b.business_name
FROM Favourites AS f
JOIN Category AS c ON (c.id = f.category_id)
JOIN Business AS b ON (b.id = f.business_id)
JOIN Metro AS m ON (m.id = f.metro_id)
WHERE m.name="boston" AND c.category_name="bar"
GROUP BY f.business_id, f.category_id
ORDER BY hits DESC