回答

收藏

如何(或可以)在多列上选择DISTINCT?

技术问答 技术问答 81 人阅读 | 0 人回复 | 2023-09-13

我需要从合并了2列的表中检索所有行。因此,我希望所有在同一天以相同价格进行的销售都没有其他任何销售。基于日期和价格的唯一销售将更新为活动状态。2 H+ i, p/ h8 g4 i5 T
所以我在想:5 I$ i$ F* ^/ O
UPDATE sales) d! o6 e7 p7 {8 u0 w/ D
SET status = 'ACTIVE'% l# U4 o. E, M- R( t) L' K
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)" |. \: H+ s* @/ F5 Y$ w. }) ~
             FROM sales
& A) |- ^! o4 r2 M2 ?. `             HAVING count = 1)
* \0 k; h5 [. ]* }2 I但是我的大脑比这更痛。
5 E) |" N( q/ b               
  ]' J1 M6 U, [2 B解决方案:# a- ?7 b9 n5 s0 V  R% t3 ~
                + ~1 w' V% s. z. D, k
7 E3 ]- ^# e% \( y- t
( ^6 J  Z, F$ ~8 s  z1 j+ F
                SELECT DISTINCT a,b,c FROM t/ ?+ Z. F/ L: X+ t/ r
是 大致 等效于:
+ [) v6 z9 i  s/ }SELECT a,b,c FROM t GROUP BY a,b,c
  ~& L: S8 z' ?5 N习惯GROUP BY语法是一个好主意,因为它更强大。
4 ?. V8 _9 E7 r: X' ]( A: w, B3 [对于您的查询,我会这样做:
$ \1 x! H) o, G/ hUPDATE sales
+ P5 g$ G9 C3 c3 d; U. pSET status='ACTIVE'. g; M! G9 u9 b! X( e6 `" r5 Y7 I
WHERE id IN" @$ D! }0 ~% J0 P, W
(- n8 B& ^0 a5 i2 S2 n
    SELECT id8 I' ?8 y9 q+ V* Y6 h
    FROM sales S
: o+ @5 l% m& w  I% M  Y5 a, ?0 h    INNER JOIN
7 W2 p5 z9 A1 ^( F" q    (7 B7 p: {8 n+ _
        SELECT saleprice, saledate6 ?. D. Y; I& [/ z' d
        FROM sales
! N' X+ e2 s' l3 n* h' l9 Y        GROUP BY saleprice, saledate
* q+ k8 @/ a4 U* L        HAVING COUNT(*) = 1
; `! W3 o0 M- a9 u6 e    ) T2 c* R! z( o( W, r4 a0 p  s4 a2 u
    ON S.saleprice=T.saleprice AND s.saledate=T.saledate4 W0 Y/ ~7 i2 ?  B
)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则