[英]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.