SQL 查询 - 计算 SUM 大于当前记录的记录数
SQL Query - Count number of records where SUM is greater than current record
我正在编写一个 SQL 查询来对产品的总销售额求和,我需要一种方法来使用 COUNT 函数来计算 SUM(总销售额)大于当前记录的记录数.
这是我目前的情况:
SELECT product_id, SUM(product_gross_revenue) AS TotalSales, t.name as Category
FROM {prefix}wc_order_product_lookup c
LEFT JOIN wp_posts p ON p.id = c.product_ID
LEFT JOIN wp_term_relationships AS tr ON tr.object_id = p.ID
JOIN wp_term_taxonomy AS tt ON tt.taxonomy = 'product_cat' AND tt.term_taxonomy_id = tr.term_taxonomy_id
JOIN wp_terms AS t ON t.term_id = tt.term_id
WHERE (t.name='Cat A' OR t.name='Cat B' OR t.name='Cat C' OR t.name='Cat D' OR t.name='Cat E')
GROUP BY product_id
ORDER BY TotalSales DESC
我想在我的 select 语句中添加一个 COUNT 函数来计算 TotalSales 大于当前记录的记录数,但我尝试的所有操作都失败了。
例如,我当前的 table 看起来像这样:
product_id
product_gross_revenue
name
1
50
Cat A
2
150
Cat B
3
100
Cat C
1
150
Cat A
3
200
Cat C
我希望我想要的输出是:
product_id
TotalSales
name
Count
1
200
Cat A
2
2
150
Cat B
3
3
300
Cat C
1
with data as (<your query minus order by>)
select *,
(
select count(*)
from data d2
where d2.TotalSales > d1.TotalSales
) as X
from data d1
order by TotalSales desc
如果您的条件变得更复杂,那么子查询将起作用。听起来这也行得通:
rank() over (order by sum(product_gross_revenue)) - 1 as TotalSales
我正在编写一个 SQL 查询来对产品的总销售额求和,我需要一种方法来使用 COUNT 函数来计算 SUM(总销售额)大于当前记录的记录数.
这是我目前的情况:
SELECT product_id, SUM(product_gross_revenue) AS TotalSales, t.name as Category
FROM {prefix}wc_order_product_lookup c
LEFT JOIN wp_posts p ON p.id = c.product_ID
LEFT JOIN wp_term_relationships AS tr ON tr.object_id = p.ID
JOIN wp_term_taxonomy AS tt ON tt.taxonomy = 'product_cat' AND tt.term_taxonomy_id = tr.term_taxonomy_id
JOIN wp_terms AS t ON t.term_id = tt.term_id
WHERE (t.name='Cat A' OR t.name='Cat B' OR t.name='Cat C' OR t.name='Cat D' OR t.name='Cat E')
GROUP BY product_id
ORDER BY TotalSales DESC
我想在我的 select 语句中添加一个 COUNT 函数来计算 TotalSales 大于当前记录的记录数,但我尝试的所有操作都失败了。
例如,我当前的 table 看起来像这样:
product_id | product_gross_revenue | name |
---|---|---|
1 | 50 | Cat A |
2 | 150 | Cat B |
3 | 100 | Cat C |
1 | 150 | Cat A |
3 | 200 | Cat C |
我希望我想要的输出是:
product_id | TotalSales | name | Count |
---|---|---|---|
1 | 200 | Cat A | 2 |
2 | 150 | Cat B | 3 |
3 | 300 | Cat C | 1 |
with data as (<your query minus order by>)
select *,
(
select count(*)
from data d2
where d2.TotalSales > d1.TotalSales
) as X
from data d1
order by TotalSales desc
如果您的条件变得更复杂,那么子查询将起作用。听起来这也行得通:
rank() over (order by sum(product_gross_revenue)) - 1 as TotalSales