簡體   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