【发布时间】:2021-12-22 07:00:17
【问题描述】:
给定 2 张桌子,我需要一个购物奖励的分组摘要。更多的项目意味着更多的奖励。
tab_basket
| id | name | shopping_no | type |
|---|---|---|---|
| 001 | Mike | 00001 | A |
| 002 | Mike | 00001 | A |
| 003 | Mike | 00001 | A |
| 004 | Tom | 00002 | B |
| 005 | Tom | 00002 | B |
| 006 | Tony | 00003 | A |
| 007 | Heinz | 00004 | A |
tab_award
| items | award | type_award |
|---|---|---|
| 1 | 0.05 | A |
| 2 | 0.50 | A |
| 3 | 0.90 | A |
| 4 | 1.00 | A |
| 1 | 0.15 | B |
| 2 | 0.70 | B |
| 3 | 1.10 | B |
| 4 | 1.30 | B |
我需要下表作为结果。
| award | items | shopping_no | type _award |
|---|---|---|---|
| 0.90 | 3 | 00001 | A |
| 0.70 | 2 | 00002 | B |
| 0.05 | 1 | 00003 | A |
| 0.05 | 1 | 00004 | A |
我的解决方案尝试。我每次只得到 null 作为奖励的结果(else 结果)或错误“sql0811 result of select more one row”。 我很乐意为您提供任何帮助,谢谢!
SELECT award,
items,
shopping_no,
type_award
FROM tab_basket t
LEFT OUTER JOIN tab_award u ON t.TYPE = u.type_award
AND CASE WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '1' THEN '1'
case WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '2' THEN '2'
CASE WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '3' THEN '3'
CASE WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '4' THEN '4'
ELSE 'no_price'
END = u.award
【问题讨论】: