查询数据库获取第一个唯一值
Posted
技术标签:
【中文标题】查询数据库获取第一个唯一值【英文标题】:Query database to obtain first unique value 【发布时间】:2018-12-06 22:02:03 【问题描述】:我有一个非常简单的表格,如下所示:
id | custom_id | answer
----------------------------------
1 | 123 | Answer 1
__________________________________
2 | 123 | Answer 2
__________________________________
3 | 422 | Answer 3
__________________________________
4 | 345 | Answer 2
__________________________________
5 | 992 | Answer 1
__________________________________
6 | 452 | No answer
__________________________________
我要做的是计算Answer 1
、Answer 2
等的数量。因此,对于上述数据,我希望得到:
2 * Answer 1
2 * Answer 2
1 * Answer 3
请注意,任何 No answer
都应该被丢弃。
然而,除此之外,我只想考虑每个custom_id
的一个答案,这应该是他们的第一个答案。所以真的,我期望得到的上述数据的输出应该是:
2 * Answer 1
1 * Answer 2
1 * Answer 3
这是因为我们只接受custom_id = 123
的第一个答案。
到目前为止,我进行了以下查询:
select
answer,
count(*) as totalCount
from
" . DB_TABLE . "
where
answer <> 'No answer'
group by
custom_id
但是,这似乎返回了总计数(正如我首先解释的那样),没有考虑到每个 custom_id
应该只有一个。我以为 group by 会解决这个问题,但似乎不是这样。
我怎样才能达到我所追求的结果?
谢谢
【问题讨论】:
【参考方案1】:一种方法,首先是为每个custom_id
创建一个带有IDs
的第一个答案的派生表,并过滤那些具有No answer
值的表(因为您想忽略它们),如下所示:
SELECT
custom_id,
MIN(id) AS firstAnswerID
FROM
<table_name>
WHERE
answer <> "No Answer"
GROUP BY
custom_id
然后,我们可以在 ID
列上将原始表与前一个表连接起来(这将像过滤器一样过滤那些不是第一个答案或具有 No answer
值的人),创建一个 GROUP BY
answer
列并计算每个的数量。总之,这会做你想做的事:
SELECT
t1.answer,
COUNT(*) AS NumTimes
FROM
<table_name> AS t1
INNER JOIN
( SELECT
custom_id,
MIN(id) AS firstAnswerID
FROM
<table_name>
WHERE
answer <> "No Answer"
GROUP BY
custom_id ) AS t2 ON t2.firstAnswerID = t1.id
GROUP BY
t1.answer
ORDER BY
NumTimes DESC
你可以在这里玩这个:DB Fiddle
【讨论】:
【参考方案2】:尝试使用这个:
select answer, count(answer) as totalCount from " . DB_TABLE .
" where answer <> 'No answer' group by answer
您应该计算每个答案组的行数,而不是整个表格。
【讨论】:
我刚刚尝试过,但它仍然返回 custom_id 的重复项count(*)
和count(answer)
之间的唯一区别是如果有空答案,那么count(answer)
将不计算在内。
见***.com/questions/2876909/…以上是关于查询数据库获取第一个唯一值的主要内容,如果未能解决你的问题,请参考以下文章