任何人都对如何更好地编写这段代码有任何想法?
SELECT Column_A, Column_B, Column_C, Column_D, Column_E
FROM TABLE_A
WHERE Column_A IN
(
SELECT Column_A
FROM
(
SELECT Column_A, COUNT(DISTINCT COLUMN_B) AS Column_B_Count
FROM TABLE_A
GROUP by Column_A
HAVING Column_B_Count > 1
) AS A
)
GROUP BY Column_A, Column_B, Column_C, Column_D, Column_E;
谢谢!
答案 0 :(得分:0)
SELECT DISTINCT
A.Column_A
, A.Column_B
, A.Column_C
, A.Column_D
, A.Column_E
FROM
TABLE_A AS A
JOIN
(
SELECT Column_A
FROM TABLE_A
GROUP by Column_A
HAVING COUNT(DISTINCT COLUMN_B) > 1
) AS Column_B_Count
ON A.Column_A = Column_B_Count.Column_A
答案 1 :(得分:0)
SELECT Distinct Column_A,
Column_B,
Column_C,
Column_D,
Column_E
FROM TABLE_A
WHERE Column_A IN
(
SELECT Column_A
FROM TABLE_A
GROUP by Column_A
HAVING COUNT(DISTINCT COLUMN_B) > 1
)
答案 2 :(得分:0)
我会使用窗口函数。我想这就是你想要的:
select . . .
from (select a.*,
min(column_b) over (partition by a) as min_b,
max(column_b) over (partition by a) as max_b,
from table_a a
) a
where min_b <> max_b;
如果此查询可能返回重复项,您可能仍需要select distinct
。
答案 3 :(得分:0)
SELECT DISTINCT -- same as the final GROUP BY of original query
Column_A, Column_B, Column_C, Column_D, Column_E
FROM TABLE_A
--
GROUP BY Column_A, Column_B, Column_C, Column_D, Column_E
QUALIFY -- emulating DISTINCT > 1, which is not allowed in Windowed Aggregates:
MIN(COLUMN_B) OVER (PARTITION BY Column_A)
<> MAX(COLUMN_B) OVER (PARTITION BY Column_A)
根据实际数据,即每个组的重复数量较少,删除GROUP BY
可能更有效。