我有这两个表:
stores:
+----------+--------------+
| store_id | store_number |
+----------+--------------+
| 1 | 231 |
| 2 | 132 |
| 3 | 321 |
+----------+--------------+
entrances:
+-------------+----------+-----------------+
| entrance_id | store_id | entrance_number |
+-------------+----------+-----------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 6 | 3 | 3 |
+-------------+----------+-----------------+
entrance_number
是从1
开始的每个商店的序列号。我想要做的是JOIN
这两个表,然后将1
添加到entrance_number
,以便为每个商店获得下一个entrance_number
。
像这样:
SELECT
store_number,
entrance_number + 1
FROM
stores
JOIN
entrances
ON
stores.store_id = entrances.store_id
给出了这个结果:
+--------------+-----------------+
| store_number | entrance_number |
+--------------+-----------------+
| 231 | 2 |
| 231 | 3 |
| 132 | 2 |
| 321 | 2 |
| 321 | 3 |
| 321 | 4 |
+--------------+-----------------+
我想要的是获得每个商店的单个顶级入口号码,结果如下:
+--------------+-----------------+
| store_number | entrance_number |
+--------------+-----------------+
| 231 | 3 |
| 132 | 2 |
| 321 | 4 |
+--------------+-----------------+
为每个商店提供下一个entrance_number
。
如何使用JOIN
从入口处获得“单一入口”?
答案 0 :(得分:2)
您需要应用Group By
和Max
。
SELECT
store_number,
max(entrance_number + 1)
FROM
stores
JOIN
entrances
ON
stores.store_id = entrances.store_id
group by store_number
答案 1 :(得分:0)
试试这个。
select store_number,entrance_number from
( SELECT
store_number,
(entrance_number)+1 AS 'entrance_number ',
ROW_NUMBER() OVER ( PARTITION BY store_number ORDER BY entrance_number DESC ) AS RankID
FROM
stores S
JOIN
entrances E
ON
S.store_id = E.store_id
)a
where RankID='1' -- here You can change RankID as per requirement like for top entrance use 1 or 2nd top use 2
使用MAX和Group by:
SELECT
store_number,
MAX(entrance_number) + 1 AS 'entrance_number '
FROM
stores S
JOIN
entrances E
ON
S.store_id = E.store_id
GROUP BY store_number