SQL查询按类别查找两个联合表的最大值

时间:2015-07-21 20:32:33

标签: php mysql

如果我必须加入两个表,我想知道如何找到每个类别的最大值。

我有两张桌子。餐厅拥有名称,地址,美食,县(区)和摆脱(餐馆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 ......等等

1 个答案:

答案 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所以你可以检查这个场景并添加一些数据,所以我们如果需要,可以调整查询。