我有這樣的桌子
companies users
id| name id | company_id| name
1 | AIRBUS 101 | 2 | Martin
2 | BOEING 102 | 1 | Ray
3 | CHRYSLER 103 | 3 | Richard
我必須得到結果:公司/用戶數/用戶百分比。
我試過了
SELECT companies.name as Societe
, COUNT(users.id) as nbre_utilisateurs
, nbre_utilisateurs*100/(SELECT SUM (nbre_utilisateurs) as pourcentage
FROM users
JOIN companies ON companies.id=users.company_id
GROUP BY Societe
ORDER BY nbre_utilisateurs DESC
并得到回應:
Query Error: error: syntax error at or near ";"
那么我的問題是:什么“;” ? 沒有任何“;” 在這里......我一直在嘗試許多其他語法,但沒有設法獲得公司/用戶數/用戶百分比。
我必須找到 2 種不同的制作方法,并確定如何使其最快。我真的是 PostgreSQL 的新手,并請求您的幫助:)
uj5u.com熱心網友回復:
正如其他人指出的那樣,您)的查詢中有一個缺失,這是錯誤的根源。即使您修復了您的查詢仍然無法作業的問題,因為您正在參考nbre_utilisateurs同一SELECT陳述句中的計算列。正如 Stackoverflow answer 中所述,有幾種方法可以解決這個問題。
我會親自重新撰寫查詢以計算 CTE 中每個公司的用戶數,然后有一個單獨的查詢來計算市場份額百分比。
-- CTE for calculating users per company
with anon_1 as (
SELECT companies.name as Societe,
COUNT(users.id) as nbre_utilisateurs
FROM users
JOIN companies ON companies.id = users.company_id
GROUP BY companies.name
)
-- Final query to get company, number of users, market share
SELECT anon_1.Societe,
anon_1.nbre_utilisateurs,
(
anon_1.nbre_utilisateurs * 100 / SUM (anon_1.nbre_utilisateurs)
) as pourcentage
from anon_1
ORDER BY anon_1.nbre_utilisateurs DESC
uj5u.com熱心網友回復:
這是錯誤的 nbre_utilisateurs*100/(SELECT SUM (nbre_utilisateurs) as pourcentage
SELECT companies.name as Societe
, COUNT(users.id) as nbre_utilisateurs
, COUNT(users.id) *100/(SELECT count(*) from users) as pourcentage
FROM users
JOIN companies ON companies.id=users.company_id
GROUP BY Societe
ORDER BY nbre_utilisateurs DESC
您也可以使用視窗函式:
SELECT companies.name as Societe
, COUNT(users.id) as nbre_utilisateurs
, COUNT(users.id) *100/ sum(count(users.id)) over () as pourcentage
FROM users
JOIN companies ON companies.id=users.company_id
GROUP BY Societe
ORDER BY nbre_utilisateurs DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319103.html
