【问题标题】:Looking for the puppy owner's name that had the puppy most serviced by the Puppy Grooming寻找由 Puppy Grooming 服务最多的小狗的小狗主人的名字
【发布时间】:2018-04-21 16:22:45
【问题描述】:

我有几张桌子: 第一个:所有者

Owner_ID    Owner_Name      
   1           Sam  
   2          Andrea
   3          Gabriela

第二个: 服务_完成

Puppy_ID   servided_date
1               01/25/2012
2               02/18/2012
3               05/14/2012

第三个:

Puppy's table

Puppy_ID     Owner_ID
1               1
2               2
3                3

我有这个代码:

Select owner_name
from puppy p, owner o 
where p.owner_id = o.owner_ID

从这里我被卡住了。我正在考虑表之间的连接,但我不确定

【问题讨论】:

  • 发布您的代码。
  • 是的,您应该使用更现代的连接语法。通过按行数 (*) 降序排列,第一行将是服务最多的行。

标签: mysql sql subquery


【解决方案1】:

以下将返回宠物服务最多的前 5 位主人。

SELECT 
    a.`Owner_ID`,
    a.`Owner_Name`,
    COUNT(*) as `Times_Serviced`
FROM `Owner` a
JOIN `Puppys` b
ON a.`Owner_ID` = b.`Owner_ID`
JOIN `Service_Done` c
ON c.`Puppy_ID` = b.`Puppy_ID`
GROUP BY a.`Owner_ID`
ORDER BY count(*) DESC
LIMIT 5;

通过更改分组依据,您还可以返回服务最多的宠物。您还可以按年份(或其他时间段)对结果进行分组。

【讨论】:

    【解决方案2】:

    上述查询将为您提供服务最多的小狗的所有者,方法是根据所有者对其进行分组,并根据服务的发生次数(降序)对其进行排序。

    SELECT Top 1 o.Owner_Name  --Owner with most servicing
    FROM Owner o
    JOIN Puppys p ON o.Owner_ID = p.Owner_ID
    JOIN Service_Done c ON c.Puppy_ID = p.Puppy_ID
    GROUP BY o.Owner_ID  --grouping based on owner
    ORDER BY count(*) DESC --order in descending order on the count of occurences 
    

    【讨论】:

    • 兄弟解释一下!
    • 上述查询将通过根据所有者对其进行分组并根据服务的发生次数(降序)来为您提供服务最多的小狗的所有者。 SELECT Top 1 o.Owner_Name -- 拥有最多服务的所有者 FROM Owner o JOIN Puppys p ON o.Owner_ID = p.Owner_ID JOIN Service_Done c ON c.Puppy_ID = p.Puppy_ID GROUP BY o.Owner_ID -- 基于所有者的分组 ORDER BY count(*) DESC --按出现次数降序排列
    • 感谢您提供更多详细信息。为了完整起见,请将其作为编辑放在您的答案中,而不是对您的答案发表评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    相关资源
    最近更新 更多