如何使用 SQL 变量并遍历唯一值?



我一直在寻找一种方法来迭代 case 语句中列的唯一值。我不知道唯一值会是什么。像这样的东西。

CASE WHEN (distinct value for car_model) THEN (SELECT sum(buyers) FROM table WHERE car_model NOT IN distinct value for car_model)

我希望 case 语句遍历car_model的所有不同值。出于某种原因,我不知道该怎么做。我不知道语法来确保 WHEN 中的非重复值与我的 WHERE 子句中的值相同。

桌子


+-----------+---------+--------+| car_model | sales | buyers |
+-----------+---------+--------+
| rav4 | 100,000 | 5 || rav4 | 15,000 | 1 |
| cc | 20,000 | 1 |

| navigator | 30,000 | 1 || cc | 17,000 | 1 |

| q5 | 78,000 | 3 |
+-----------+---------+--------+

期望的结果


+-----------+--------+| car_model | buyers |
+-----------+--------+| rav4 | 6 |

| cc | 10 |
| navigator | 11 || q5 | 9 |

+-----------+--------+

也许这会起作用:
未经测试

select t.car_model, (select sum(buyers) from table) - sum(t.buyers) buyers
from table t
group by t.car_model

这将取所有买家的总和,并减去当前行car_model的买家总和。

要获得"不包括行项目 [总计] 的总数"(如您在评论中提到的),您需要汇总所有型号的所有买家以获得总买家,然后汇总每个型号的买家并从总买家中减去它。以下是使用 CROSS JOIN 执行此操作的一种方法:

SELECT 
c.car_model
, t.total_buyers - SUM(c.buyers) AS total_buyers_minus_buyers_for_this_model
FROM Table c
CROSS JOIN 
(SELECT SUM(buyers) AS total_buyers FROM Table) t
GROUP BY 
c.car_model

请参阅有关 SQLFiddle 的示例。

相关内容

  • 没有找到相关文章

最新更新