仅在INNER JOIN上显示最高金额

时间:2017-06-11 15:48:42

标签: mysql

我们有一个互动的美国地图,显示的状态等于您的要求。

我们的数据库存在问题,我们有两个表staateneconomydata

我们的内部联接

SELECT staaten.staat_id, staat_name, economydata.INDUSTRY_ID, economydata.INDUSTRIE_UMSATZ_ANTEIL 
FROM staaten, economydata 
WHERE staaten.staat_id = economydata.staat_i;`

给我们这个输出:

staat_id    staat_name    INDUSTRY_ID     INDUSTRIE_UMSATZ_ANTEIL   
1           Alabama       3               1
1           Alabama       6               1
1           Alabama       10              3
1           Alabama       11              4
1           Alabama       12              18
1           Alabama       13              11
1           Alabama       25              7
1           Alabama       34              6
1           Alabama       35              7 
1           Alabama       36              3
1           Alabama       45              2
1           Alabama       51              5
1           Alabama       56              11
1           Alabama       60              6
1           Alabama       64              1
1           Alabama       65              3
1           Alabama       69              1
1           Alabama       70              7
1           Alabama       75              0
1           Alabama       78              3
1           Alabama       81              3
1           Alabama       82              17
2           Alaska        3               2
2           Alaska        6               16
2           Alaska        10              2
2           Alaska        11              4
2           Alaska        12              3
2           Alaska        13              0
2           Alaska        25              3
2           Alaska        34              2
2           Alaska        35              4
2           Alaska        36              12
2           Alaska        45              3
2           Alaska        51              3
2           Alaska        56              9
2           Alaska        60              4
2           Alaska        64              1
2           Alaska        65              2
2           Alaska        69              0
2           Alaska        70              7
2           Alaska        75              1
2           Alaska        78              3
2           Alaska        81              2
2           Alaska        82              21

但我们每个Staate只需要一行,只包含economydata.INDUSTRIE_UMSATZ_ANTEIL的最高INDUSTRY_ID

我们得到的最接近的是SELECT ... MAX(economydata.INDUSTRIE_UMSATZ_ANTEIL) FROM ... GROUP BY staaten.staat_name,但我们失去了economydata.INDUSTRIE_UMSATZ_ANTEILINDUSTRY_ID之间的联系,它向我们显示了最高INDUSTRIE_UMSATZ_ANTEIL但不是INDUSTRY_ID }

1 个答案:

答案 0 :(得分:2)

您可以通过staat_id

对max(INDUSTRIE_UMSATZ_ANTEIL)组的结果使用元组和in子句
  SELECT 
      staaten.staat_id
    , staat_name
    , economydata.INDUSTRY_ID
    , economydata.INDUSTRIE_UMSATZ_ANTEIL 
  FROM staaten
  INNER JOIN  economydata on staaten.staat_id = economydata.staat_i
  where (staaten.staat_id, economydata.INDUSTRIE_UMSATZ_ANTEIL ) in (
        SELECT 
        staaten.staat_id
      , max(economydata.INDUSTRIE_UMSATZ_ANTEIL) 
    FROM staaten
    INNER JOIN  economydata on staaten.staat_id = economydata.staat_i
    group by  staaten.staat_id

  )

我建议使用显式连接代替where子句......代码更清晰