2017-02-04 48 views
0

我在哪裏遇到問題
我相信我需要使用COUNT;然而,我失去了如何將一行與同一列內的每行進行比較,然後統計有多少行比各行更少/更便宜。先謝謝你!

這裏是我試圖解決的官方問題:
「使用示例模式,寫一個SQL語句,將返回所有產品在產品表以及有多少其他產品的數量是比產品更便宜價錢。」SQL新手:如何比較列中的所有行,以反映有多少行比各行「便宜/少」?

Image example of solution

Image of all tables relative to the question


到目前爲止我的代碼...

SELECT 
product_id, 
product_name, 
product_price, 
CASE WHEN product_price >???? 
END AS products_cheaper_count 
FROM [Products] 

回答

0

你說得對,你需要在內部SELECT查詢中使用COUNT獲得的數所有產品比當前產品便宜,例如:

SELECT p.product_id, p.product_name, p.product_price, 
(SELECT COUNT(*) FROM products WHERE product_price < p.product_price) AS products_cheaper_count 
FROM products; 
0

試想一下,你使用下面的代碼

declare @price float(24) = 7.50 
select count(*) 
    from Products sq 
    where sq.product_price < @price 

將得到的讀數將是2,我們知道這是你向我們展示的例子真。然而,這是以@ price的固定值完成的,我們希望它對錶中的每條記錄都進行更改。所以我們只是擴展這個想法,並使用相關的子查詢

select product_id, product_name, product_price, 
     (select count(*) 
      from Products sq 
      where sq.product_price < pro.product_price 
     ) as products_cheaper_count 
    from Products pro 

希望這有助於!

0
SELECT p.product_id, p.product_name, p.product_price, 
    (SELECT COUNT(*) FROM products pc WHERE pc.product_price < p.product_price) AS products_cheaper_count 
    FROM products p 
+0

試試這最後的sql! –