mysql – 在LIKE的CASE语句中使用GROUP_CONCAT列别名
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 在LIKE的CASE语句中使用GROUP_CONCAT列别名,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1722字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 在LIKE的CASE语句中使用GROUP_CONCAT列别名](/upload/InfoBanner/zyjiaocheng/902/1700f85d82a144a3967d67d11ae96422.jpg)
这里的想法是GROUP_CONCAT从连接到option_stock和options表的stock表中编译一个选项代码列表,按库存id分组.
一个示例行是这样的:
Name Options Transmission
'Holden Commodore' '111, 145, 166, 188' 'Auto'
这个视图原样,但我不禁觉得有更优雅的解决方案吗?
CREATE VIEW stock_view AS
(select s.description AS Name,
group_concat(o.option_code order by o.option_code ASC separator ', ')
AS Options,
(case
WHEN group_concat(o.option_code) LIKE '%111%' then 'Auto'
WHEN group_concat(o.option_code) LIKE '%112%' then 'Manual'
else 'Other'
end) as Transmission
from stock s
join option_stock ost ON s.id = ost.stock_id
join options o ON o.id = ost.option_id
group by s.id)
我试图避免在CASE困境中使用这个看起来丑陋的GROUP_CONCAT,但是我得到一个错误,如果我在case语句中使用它,则字段Options不存在,如下所示:
WHEN `Options` LIKE '%111%' then 'Auto'
我知道为什么会抛出错误 – 这是因为你不能以这种方式使用另一列的别名.但它有办法吗?
解决方法:
这些位对我来说似乎不够可靠:
WHEN group_concat(o.option_code) LIKE '%111%' ...
WHEN group_concat(o.option_code) LIKE '%112%' ...
喜欢’?1%’会匹配,例如’111222,145,166,188’以及’111,145,166,188′.当然,除非只有3个字符的代码,否则您不希望很快改变.
不过,我可能会使用不同的技术,很可能是条件COUNT或SUM.例如:
(CASE
WHEN SUM(o.option_code = '111') > 0 THEN 'Auto'
WHEN SUM(o.option_code = '112') > 0 THEN 'Manual'
ELSE 'Other'
END) AS Transmission
另请注意,在您的特定情况下,以下(尽管相当具体)解决方案也应该起作用:
IFNULL(
MIN(CASE o.option_code WHEN '111' THEN 'Auto' WHEN '112' THEN 'Manual' END),
'Other'
) AS Transmission
即如果’111’或由于某种原因,在同一组行的代码中找到’111’和’112′,则MIN()将返回’Auto’,如果’112’不是’111′,它将评估为“手动”.否则它将为NULL,在这种情况下,IFNULL()函数将评估为“其他”.
内容总结
以上是互联网集市为您收集整理的mysql – 在LIKE的CASE语句中使用GROUP_CONCAT列别名全部内容,希望文章能够帮你解决mysql – 在LIKE的CASE语句中使用GROUP_CONCAT列别名所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。