【发布时间】:2021-12-28 03:16:33
【问题描述】:
我需要检索唯一但截断的部件号,它们的描述值是有条件确定的。
数据:
以下是一些简化的示例数据:
(真正的表有 50 万行)
create table inventory(
partnumber VARCHAR(10),
description VARCHAR(10)
);
INSERT INTO inventory (partnumber,description) VALUES
('12345','ABCDE'),
('123456','ABCDEF'),
('1234567','ABCDEFG'),
('98765','ZYXWV'),
('987654','ZYXWVU'),
('9876543','ZYXWVUT'),
('abcde',''),
('abcdef','123'),
('abcdefg','321'),
('zyxwv',NULL),
('zyxwvu','987'),
('zyxwvut','789');
尝试过:
我尝试了太多东西,无法在此处列出。
我已经finally found a way 克服了所有“未知字段”错误,至少得到了一些结果,但是:
- 真是超级笨拙!
- 我的结果不限于唯一的
prods。
这是我当前的查询:
SELECT
LEFT(i.partnumber, 6) AS prod,
CASE
WHEN agg.cnt > 1
OR i.description IS NULL
OR i.description = ''
THEN LEFT(i.partnumber, 6)
ELSE i.description
END AS `descrip`
FROM inventory i
INNER JOIN (SELECT LEFT(ii.partnumber, 6) t, COUNT(*) cnt
FROM inventory ii GROUP BY ii.partnumber) AS agg
ON LEFT(i.partnumber, 6) = agg.t;
目标:
我的目标是检索:
| prod | descrip |
|---|---|
| 12345 | ABCDE |
| 123456 | 123456 |
| 98765 | ZYXWV |
| 987654 | 987654 |
| abcde | abcde |
| abcdef | abcdef |
| zyxwv | zyxwv |
| zyxwvu | zyxwvu |
问题:
- 有哪些更简洁的方法可以将
COUNT()聚合数据与CASE类型条件结合使用? - 如何限制我的结果以使所有
prods 都是唯一的?
【问题讨论】: