如何在不选择SQL查询的情况下为SQL查询创建别名

时间:2016-02-05 10:45:35

标签: mysql sql

有没有办法在没有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)创建别名以减少代码重复吗?

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字段中拆分出“实时/演示”。 ;)