如果我必须加入两个表,我想知道如何找到每个类别的最大值。
我有两张桌子。餐厅拥有名称,地址,美食,县(区)和摆脱(餐馆ID)。
我还有一个检查,它有一个摆脱,idate(检查日期)和totalscore(该餐厅的检查分数)。
说我必须展示餐厅的美食,餐厅的名称,地址和总数(来自检查班)。我必须为特定县的每种菜肴列出最好的餐厅(' Cobb'在我的代码中),检查日期必须在2015年。例如,中国菜将是"北京中央"总计99(满分100分)。
到目前为止,我有这段代码:
select distinct cuisine, name,address,
max(totalscore) from restaurant r join inspection i on r.rid = i.rid
where county = 'Cobb' and year(idate) = 2015 group by cuisine, name,
adddress;
虽然这让我接近,但我不断获得副本。例如,它列出了两个不同的中餐馆,而不是选择最好的一家。
我试图改进我的sql编码风格,所以如果有人有解决方案或最佳实践,我们将不胜感激!
---- --- EDIT 这是我加入检查和餐厅时我的数据库中的一些示例数据。
rid | idate | totalscore | name | county | street | cuisine |
+-----+------------+------------+-------------------+--------+---------------------+----------+
| 13 | 2015-01-04 | 90 | Heirloom | Cobb | 2243 Akers Mill Rd | American |
| 14 | 2015-01-27 | 49 | China Moon | Cobb | 2810 Paces Ferry Rd | Chinese |
| 14 | 2015-02-27 | 83 | China Moon | Cobb | 2810 Paces Ferry Rd | Chinese |
| 15 | 2015-03-27 | 77 | House of Chan | Cobb | 2469 Cobb Pkwy | Chinese |
| 16 | 2015-03-18 | 47 | I Love Sushi | Cobb | 2086 Cobb Pkwy | Japanese |
| 16 | 2015-04-18 | 87 | I Love Sushi | Cobb | 2086 Cobb Pkwy | Japanese |
| 17 | 2015-05-18 | 90 | Douceur de France | Cobb | 277 S Marietta Pkwy | French |
| 18 | 2015-05-22 | 59 | Swapna | Cobb | 2655 Cobb Pkwy | Indian |
| 18 | 2015-06-22 | 75 | Swapna | Cobb | 2655 Cobb Pkwy | Indian |
| 19 | 2015-06-18 | 32 | Mezza Luna | Cobb | 1669 Spring Rd | Italian |
| 19 | 2015-07-18 | 98 | Mezza Luna | Cobb | 1669 Spring Rd | Italian |
期望的结果将类似于
印度人:Swapna:75 中国人:中国月亮:83 意大利语:Mezza Luna:98 ......等等
答案 0 :(得分:0)
如果您可以创建SQL Fiddle,那就太棒了。如果我理解你正确,你想为每个组(美食)选择最大值。你应该看看here如何做到这一点。
此处查询的外观如下:
SELECT r.cuisine, r.name, r.address, i.totalscore
FROM restaurant r
JOIN inspection i
ON r.rid = i.rid
WHERE county = 'Cobb' AND year(idate) = 2015
AND totalscore = (SELECT MAX(i1.totalscore)
FROM FROM restaurant r1
JOIN inspection i1
ON r1.rid = i1.rid
WHERE r.cuisine = r1.cuisine);
希望工作,我无法测试它,因为你没有在你的问题中提供一些数据......
GL!
修改强> 嗨,你有问题的编辑我尝试创建你在此查询中使用的两个表并测试它,我的查询分叉很好...这是SQL Fiddle所以你可以检查这个场景并添加一些数据,所以我们如果需要,可以调整查询。