Mysql:使用where或have作为别名

Mysql:使用where或have作为别名,mysql,having,Mysql,Having,我在努力回答两个显然很简单的问题 查询n1(工程): 选择 客户。*, 将(*)计数为“num_installazioni”, CONCAT(provincia.nome,“(”,provincia.sigla,“)”)作为“provincia” 从q_客户作为客户 加入dettaglio_installazione作为客户机上的dettinst.id=dettinst.cliente 加入q_sede作为sede ON sede.id_cliente=cliente.id上的sede 将qua

我在努力回答两个显然很简单的问题

查询n1(工程):

选择
客户。*,
将(*)计数为“num_installazioni”,
CONCAT(provincia.nome,“(”,provincia.sigla,“)”)作为“provincia”
从q_客户作为客户
加入dettaglio_installazione作为客户机上的dettinst.id=dettinst.cliente
加入q_sede作为sede ON sede.id_cliente=cliente.id上的sede
将quadra_provincia_表作为provincia.id=sede.id_provincia上的provincia连接
其中1=1且“num_installazioni”小于5
按cliente.id分组;
查询n2(不工作):

选择
客户。*,
CONCAT(provincia.nome,“(”,provincia.sigla,“)”)作为“provincia”,
将(*)计算为“num_pulizie”
从q_客户作为客户
加入q_sede作为sede ON sede.id_cliente=cliente.id上的sede
将quadra_provincia_表作为provincia.id=sede.id_provincia上的provincia连接
加入quadra_attivita成为客户上的att.id=att.id_客户
其中1=1且“num_pulizie”>=5且“num_pulizie”=5且“pulizie”
其中1=1且“num_installazioni”小于5

您在这里使用的是而不是别名-您正在检查文本文本
num\u installazioni
是否“小于”5


它“有效”,因为它不会抛出错误,因为您在此处的WHERE子句中没有使用别名(您不能)。如果您认为这会给您带来有意义的结果,那么您在此处完全错了。

我想您是对的,我也想到了这一点,但是我被第一个返回一些结果的事实分散了注意力,我必须手动验证它们以了解是否有问题(db不包含我知道的数据)。我会将此标记为已接受,谢谢
SELECT
  cliente.*,
  COUNT(*)                                           AS 'num_installazioni',
  CONCAT(provincia.nome, ' (', provincia.sigla, ')') AS 'provincia'
FROM q_cliente AS cliente
  JOIN dettaglio_installazione AS dettinst ON cliente.id = dettinst.cliente
  JOIN q_sede AS sede ON sede.id_cliente = cliente.id
  JOIN quadra_provincia_table AS provincia ON provincia.id = sede.id_provincia
WHERE 1 = 1 AND 'num_installazioni' < 5
GROUP BY cliente.id;
SELECT
  cliente.*,
  CONCAT(provincia.nome, ' (', provincia.sigla, ')') AS 'provincia',
  COUNT(*)                                       AS 'num_pulizie'
FROM q_cliente AS cliente
  JOIN q_sede AS sede ON sede.id_cliente = cliente.id
  JOIN quadra_provincia_table AS provincia ON provincia.id = sede.id_provincia
  JOIN quadra_attivita AS att ON cliente.id = att.id_cliente
WHERE 1 = 1 AND 'num_pulizie' >= 5 AND 'num_pulizie' <= 10
GROUP BY cliente.id;
SELECT
  cliente.*,
  COUNT(*)                                           AS `pulizie`,
  CONCAT(provincia.nome, ' (', provincia.sigla, ')') AS 'provincia'
FROM q_cliente AS cliente
  JOIN q_sede AS sede ON sede.id_cliente = cliente.id
  JOIN quadra_provincia_table AS provincia ON provincia.id = sede.id_provincia
  JOIN quadra_attivita AS att ON cliente.id = att.id_cliente
GROUP BY cliente.id
HAVING `pulizie` >= 5 AND `pulizie` <= 10;