2015-07-21 57 views
0

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

我有两个表。拥有名称,地址,美食,县(区)和摆脱(餐厅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编码风格,所以如果任何人有解决方案或最佳做法,将不胜感激!

----编辑--- 下面是我的数据库中的一些样本数据,当我参加检查和餐馆摆脱。

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月神:98 ......等等等等

+1

如果您喜欢,请考虑遵循以下简单的两步操作步骤:1.如果您尚未这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相符的所需结果集。 – Strawberry

+0

好的。我继续做下去。希望它能澄清事情, – Akshay

+0

嗯,不,你没有。 – Strawberry

回答

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

+0

这给了我的代码相同的输出。出于某种原因,一些美食没有成果。我将尝试在数据库中放置一些示例数据点。也许它会更有意义。 – Akshay

+0

@AkshayShukla任何一种方式我忘了在答案中提到的是,没有必要同时使用DISTINCT和GROUP BY两种烹饪方式,它几乎是一回事......如果你可以提供sql小提琴带有示例数据,以便我们可以测试我们的查询... GL –

+0

好吧,我在我的一些数据库中添加了一些可以让人们更清楚的事情。希望它澄清事情! – Akshay