Добавить условие со значением псевдонима - PullRequest
0 голосов
/ 25 февраля 2019

Я пытался добавить дополнительное условие

SELECT
   ROUND(SUM((cus.amount_product/1000)),1) as TOTAL_N,
   ROUND(SUM((cus.amount_product/1000)),1) as TOTAL_PRODUCT
FROM customs AS cus
LEFT JOIN customs_products AS cp ON cp.id = cus.customs_product_id
   WHERE cp.product IN (101,103,104,106)
   AND TOTAL_PRODUCT  >= 1

Проблема в этом TOTAL_PRODUCT.Я пытался сделать это несколькими способами:

1. AND (ROUND(SUM((cus.amount_product/1000)),1)) > 1 --> NOT WORKING
2. AND TOTAL_PRODUCT  >= 1 --> NOT WORKING

Можете ли вы помочь мне, пожалуйста?Чем я занимаюсь

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

используйте с групповым фильтром

SELECT
   ROUND(SUM((cus.amount_product/1000)),1) as TOTAL_N,
   ROUND(SUM((cus.amount_product/1000)),1) as TOTAL_PRODUCT
FROM customs AS cus
LEFT JOIN customs_products AS cp ON cp.id = cus.customs_product_id
   WHERE cp.product IN (101,103,104,106)
  having TOTAL_PRODUCT  >= 1

, так как TOTAL_PRODUCT является псевдонимом агрегированного столбца, поэтому вам нужно иметь

0 голосов
/ 25 февраля 2019
Предложение

A HAVING делает то, что вы хотите, но ваш запрос просто не имеет смысла.У вас есть одно и то же выражение дважды.Даже если это опечатка, предложение WHERE превращает LEFT JOIN во внутреннее соединение.Я подозреваю, что вы действительно хотите:

SELECT COUNT(cus.customs_product_id) as TOTAL_N,
       ROUND(SUM((cus.amount_product/1000)), 1) as TOTAL_PRODUCT
FROM customs_products cp LEFT JOIN
     customs cus
     ON cp.id = cus.customs_product_id
WHERE cp.product IN (101, 103, 104, 106)
HAVING TOTAL_PRODUCT >= 1;

Я подозреваю, что на самом деле вы могли бы также запросить GROUP BY в запросе.

0 голосов
/ 25 февраля 2019

USE having, поскольку он использует агрегированную функцию, он не будет работать в where clause

SELECT
   ROUND(SUM((cus.amount_product/1000)),1) as TOTAL_N,
   ROUND(SUM((cus.amount_product/1000)),1) as TOTAL_PRODUCT
FROM customs AS cus
LEFT JOIN customs_products AS cp ON cp.id = cus.customs_product_id
   WHERE cp.product IN (101,103,104,106)
having ROUND(SUM((cus.amount_product/1000)),1)>= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...