mysql - 查询数据库以获得第一个唯一值

标签 mysql

我有一个像这样的非常简单的表格:

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 1Answer 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/

相关文章:

php - 将列链接到 MySQL 数据库中的行

mysql - Codeigniter 设置多个 where 条件,如何取消设置

mysql - 使用 'reservation' 分两步移动存储在数据库表中的信息资源

php - 尝试使用 PHP 将配置文件从 HTML 表单更新到 MySQL

mysql - 不唯一的表

mysql - 识别具有重复电子邮件的营销事件成员

mysql - Delphi Firemonkey XE8 - 如何使用 DataSnap 正确发送/接收图像

mysql - 在mysql中的单个查询中更新多个表

php - 条件INSERT mysql查询错误

php - MySQL:PHP while 与查询和另一个 while 与查询,如何改进?