使用外键时获得结果百分比

时间:2016-02-26 08:58:20

标签: mysql

我目前有一个带4个表的数据库:

  • 客户
  • 促销(CustID& RoomID fk)
  • 房间(ManID fk)
  • 管理器

    我试图以百分比的形式获得客户所在的城市。但是,我只想向使用该经理进行购买的客户展示。目前,这一数额低于或超过100%。

    当此查询与customer表隔离时,结果正确地加起来为100%,但是需要使用manager username作为参数从sales中获取。这就是我目前所拥有的:

    SELECT
    (COUNT(c.city) / (SELECT Count(CustID) FROM Customer) * 100) AS percent,     c.city AS City
    FROM sale s
    INNER JOIN customer c ON s.CustID = c.CustID
    INNER JOIN room r ON s.RoomID = r.RoomID
    INNER JOIN manager m ON r.ManID = m.ManID
    WHERE m.UserName = 'manager123'
    GROUP BY c.City;
    

    修改

    我想补充一点,CustID可能会在sales表中多次出现,另外,它可能为null。不确定在计数时是否需要使用distinct。 把我的问题与此分开后,我觉得有必要提一下,因为我仍然无法从结果和不完整的数字中排除这些(总计<100%仍在显示)

  • 3 个答案:

    答案 0 :(得分:1)

    你走了。

    SELECT NoCity,COUNT(*)/percent *100 as percentOfCustomerBasedonManager,City
    FROM (
    SELECT m.UserName,COUNT(c.city) AS NoCity, COUNT(c.CustID) AS percent,c.city AS City FROM
    sale s
    INNER JOIN customer c ON s.CustID = c.CustID
    INNER JOIN room r ON s.RoomID = r.RoomID
    INNER JOIN manager m ON r.ManID = m.ManID
    
    GROUP BY c.City ) cityTable WHERE cityTable.UserName = 'manager123' 
    

    答案 1 :(得分:1)

    这可能有所帮助:

    SELECT city, ((city_count)/(customer_count)*100) as Percent
    (
        SELECT city, COUNT(*) as city_count, customer_count
        FROM
        (
            SELECT distinct c.city
            FROM sale s
            INNER JOIN customer c ON s.CustID = c.CustID
            INNER JOIN room r ON s.RoomID = r.RoomID
            INNER JOIN manager m ON r.ManID = m.ManID
            WHERE m.UserName = 'manager123'
            GROUP BY c.city
        ) as t1
        LEFT JOIN
        (
            SELECT city as city2, COUNT(*) as customer_count
            FROM
            (
                SELECT c.city, distinct c.CustID
                FROM sale s
                INNER JOIN customer c ON s.CustID = c.CustID
                INNER JOIN room r ON s.RoomID = r.RoomID
                INNER JOIN manager m ON r.ManID = m.ManID
                WHERE m.UserName = 'manager123'
                GROUP BY c.city
            ) as t2
        ) as t3 on t1.city=t3.city2
    ) as master
    GROUP BY city
    

    答案 2 :(得分:1)

    好的,这是我遇到的解决方案,非常感谢Lim Neo指出了我正确的方向。

    SELECT
    round(COUNT(c.city) / 
    (
        SELECT Count(b.CustID)
        FROM sale s
        INNER JOIN customer c ON s.CustID = c.CustID
        INNER JOIN room r ON s.RoomID = r.RoomID
        INNER JOIN manager m ON r.ManID = m.ManID
        WHERE m.UserName = 'Manager123'
    ) * 100)
    AS percent, c.city AS City
    FROM sale s
    INNER JOIN customer c ON s.CustID = c.CustID
    INNER JOIN room r ON s.RoomID = r.RoomID
    INNER JOIN manager m ON r.ManID = m.ManID
    WHERE m.UserName = 'Manager123'
    GROUP BY c.City;