1

没有做这样的事情

编辑于 2012 年 6 月 29 日上午 10:17 我意识到我的查询比我的示例查询复杂一些,并且当前的建议不起作用,但这是我的错。我在原始查询之上创建了一个更准确的查询。

SELECT DISTINCT
a,
max(b) as b,
(select count(distinct c) as c from d where e=2) as c
FROM d
GROUP BY a

来自 d 的样本数据

 a | b | c | e
---+---+---+---
 0 | 0 | 0 | 1
 0 | 0 | 0 | 2
 1 | 0 | 0 | 1
 1 | 0 | 0 | 1

因此对于这组数据,其中 a = 0 c 的计数为 1(其中 e==1),对于 a = 1 c 的计数为 2(其中 e==1)

编辑结束

SELECT
a,
b,
(SELECT c from d where e=2)
FROM d

或者至少有更好的方法来提高性能吗?也许像一个工会。

4

3 回答 3

2

如果我理解您的要求,那么这将起作用:

SELECT
  a,
  b,
  case
    when e=2 then c
    else null
  end as c
FROM
  d
于 2012-06-29T14:07:09.917 回答
0

据我了解,您想按a. 对于您想要最大值的每个组b,并且您想知道c行中不同值的数量e=2

其他答案在使用方面有正确的想法,CASE但没有解决您要计算不同值的问题。我认为这就是你要找的:

SELECT a, MAX(b), COUNT(DISTINCT CASE WHEN e=2 THEN c else NULL end)
  FROM d
  GROUP BY a

(您目前的问题不清楚e您的值是 1 还是 2;我在上面的查询中选择了 2。)

于 2012-06-29T20:40:09.180 回答
0

根据新信息,试试这个:

SELECT a,
       max(b) as b,
       sum(case when e=2 then 1 else 0 end) as c
FROM d 
GROUP BY a
于 2012-06-29T14:17:25.533 回答