Mysql 在包含联接的查询中计算行数
我有一个这样的问题:Mysql 在包含联接的查询中计算行数,mysql,count,Mysql,Count,我有一个这样的问题: SELECT Product.local_price*Rate.exchange_rate AS 'US_price' FROM Product INNER JOIN Rate ON Rate.currency = Product.currency WHERE Product.type='TV' HAVING US_price BETWEEN 500 AND 600; SELECT p.type, AVG(p.local_price) FROM Product p
SELECT Product.local_price*Rate.exchange_rate AS 'US_price' FROM Product
INNER JOIN Rate ON Rate.currency = Product.currency
WHERE Product.type='TV'
HAVING US_price BETWEEN 500 AND 600;
SELECT p.type, AVG(p.local_price)
FROM Product p
GROUP BY p.type
HAVING AVG(p.local_price) > 50
如何计算满足此查询的电视机数量
表格结构
- 产品表:ID、类型、当地价格
- 汇率表:货币、汇率
- 这里不需要使用
有子句;它的特殊语义仅在有groupby
子句时才相关。因此,我们可以简单地用生成它的表达式替换HAVING
子句中的usu price
,并将其移动到WHERE
子句中;然后,使用选择计数(*)
:
此外,作为一般规则(在本例中不需要),您可以始终(或几乎总是?)将整个查询包装在SELECT COUNT(*)FROM(…)t
中,以获取它返回的行总数。这里不需要使用HAVING
子句;它的特殊语义仅在有groupby
子句时才相关。因此,我们可以简单地用生成它的表达式替换HAVING
子句中的usu price
,并将其移动到WHERE
子句中;然后,使用选择计数(*)
:
此外,作为一般规则(在本例中不需要),您可以始终(或几乎总是?)将整个查询包装在中,从(…)t
中选择COUNT(*)以获取它返回的行总数。将具有美国价格的替换为和Product.local\u price*Rate.exchange\u Rate
,然后只需执行计数即可(Product.ID)
在选择
子句中:
SELECT COUNT(Product.ID)
FROM Product
INNER JOIN Rate ON Rate.currency = Product.currency
WHERE Product.type='TV'
AND Product.local_price * Rate.exchange_rate BETWEEN 500 AND 600;
如果需要聚合数据的标准,则需要使用HAVING
,如下所示:
SELECT Product.local_price*Rate.exchange_rate AS 'US_price' FROM Product
INNER JOIN Rate ON Rate.currency = Product.currency
WHERE Product.type='TV'
HAVING US_price BETWEEN 500 AND 600;
SELECT p.type, AVG(p.local_price)
FROM Product p
GROUP BY p.type
HAVING AVG(p.local_price) > 50
用和Product.local\u price*Rate.exchange
替换HAVING US\u price
,只需在SELECT
子句中执行计数(Product.ID)
:
SELECT COUNT(Product.ID)
FROM Product
INNER JOIN Rate ON Rate.currency = Product.currency
WHERE Product.type='TV'
AND Product.local_price * Rate.exchange_rate BETWEEN 500 AND 600;
如果需要聚合数据的标准,则需要使用HAVING
,如下所示:
SELECT Product.local_price*Rate.exchange_rate AS 'US_price' FROM Product
INNER JOIN Rate ON Rate.currency = Product.currency
WHERE Product.type='TV'
HAVING US_price BETWEEN 500 AND 600;
SELECT p.type, AVG(p.local_price)
FROM Product p
GROUP BY p.type
HAVING AVG(p.local_price) > 50
你为什么在这里使用HAVING
?你有其他建议吗?我的意思是,这个查询有效吗?给我们你的表结构,告诉我们你想在哪个基础上计算电视机?对不起,应该是美国价格而不是当地价格。你为什么在这里使用HAVING
?你有其他建议吗?我的意思是,这个查询有效吗k?给我们你们的桌子结构,告诉我们你们要在哪个基础上清点电视机?对不起,应该是美国价格而不是当地价格。