我有一个像这样的非常简单的表格:
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会解决这个问题,但似乎不是这样。
我怎样才能达到我想要的结果?
谢谢
最佳答案
一种方法是首先使用每个 custom_id
的第一个答案的 ID
创建一个派生表,并过滤那些具有值 No answer
(因为你想忽略它们),像这样:
SELECT
custom_id,
MIN(id) AS firstAnswerID
FROM
<table_name>
WHERE
answer <> "No Answer"
GROUP BY
custom_id
然后,我们可以在 ID
列上将原始表与之前的表连接起来(这对于那些不是第一个答案或具有 No answer< 的人来说就像一个过滤器
值),在 answer
列中创建一个 GROUP BY
并计算每个的编号。总之,这将做你想做的:
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
关于mysql - 查询数据库以获得第一个唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53660352/