有没有办法在没有SELECT
的情况下为SQL查询部分创建别名?
例如,如果我有以下查询:
SELECT
product_name,
SUM(SUBSTRING_INDEX(company_name, '|', -1) LIKE '%live%') AS count_live,
SUM(SUBSTRING_INDEX(company_name, '|', -1) LIKE '%demo%') AS count_demo,
SUM(SUBSTRING_INDEX(company_name, '|', -1) NOT LIKE '%live%' AND SUBSTRING_INDEX(company_name, '|', -1) NOT LIKE '%demo%') AS count_other,
COUNT(*) AS total
FROM `foo` GROUP BY product_name
;
我可以为SUBSTRING_INDEX(company_name, '|', -1)
创建别名以减少代码重复吗?
答案 0 :(得分:3)
不幸的是,你不能为SELECT的一部分添加别名,你可以编写一个完全正确SUBSTRING_INDEX(field, '|', -1)
的函数,但这只会让你达到MY_FUNCTION(field)
。
您还可以在子查询中首先执行子字符串位,然后将其包装在另一个选择中:
SELECT product_name,
SUM(status LIKE '%live%') AS count_live,
SUM(status LIKE '%demo%') AS count_demo,
SUM(status NOT LIKE '%live%' AND status NOT LIKE '%demo%') AS count_other,
COUNT(*) AS total
FROM (
SELECT product_name,
SUBSTRING_INDEX(company_name, '|', -1) status,
FROM foo
) s
GROUP BY product_name
我担心这可能会使用大量内存来构建子查询结果并妨碍性能。它还很复杂。
或者您可以从上一个问题中提到的表格结构中的company_name
字段中拆分出“实时/演示”。 ;)