繁体   English   中英

带内连接的WHERE子句

[英]WHERE clause with inner join

我有以下查询来计算我的数据库中的设备数量。 我尝试添加WHERE子句以仅选择设备并使用名称“iphone”进行计数。

SELECT device, count( * ) AS count, sum( 100 ) / total AS percentage
FROM devices WHERE device='apple'
CROSS JOIN (
SELECT count( * ) AS total
FROM devices
)x
GROUP BY 1 

我试图构造不同的查询,但它们都导致mysql错误。 WHERE子句的正确位置是什么?

WHERE 谈到FROM之前GROUP BY

SELECT device, count( * ) AS count, sum( 100 ) / total AS percentage
FROM devices 
INNER JOIN (
SELECT count( * ) AS total
FROM devices
)x
WHERE device='apple'
GROUP BY 1 

顺便说一下,您可以将此查询重写为:

SELECT 'apple' as device, sum(device = 'apple') AS count,
       100 * sum(device = 'apple') / count(*) AS percentage
FROM devices ;

这将删除额外的表扫描以计算总计和join (这非常便宜,因为x只有一行。

在分组之前和之后去哪里并加入:

SELECT device, count( * ) AS count, sum( 100 ) / total AS percentage
FROM devices 
CROSS JOIN (
SELECT count( * ) AS total
FROM devices
)x
WHERE device='apple'
GROUP BY 1 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM