mysql 查询某个字段出现两次的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 查询某个字段出现两次的数据相关的知识,希望对你有一定的参考价值。

表如图: 我想先获取member_id = 33415166 的appid 然后计算appid在表中出现的次数select count(trust_id) from table where appid =( select appid from table where member_id = 33415166)这是我写的sql ,但是好像不够优化,各路大神能否帮我优化一下sql

参考技术A select count(a.trust_id) from table a where exists(
select 1 from table b where b.member_id=33415166 and b.appid=a.appid
)本回答被提问者和网友采纳

MySQL 选择唯一的排序字段值

【中文标题】MySQL 选择唯一的排序字段值【英文标题】:MySQL Select unique sorted field values 【发布时间】:2015-05-13 13:07:44 【问题描述】:

我试图从一个已连接两次的表中连接 2 GROUP_CONCAT( columns ) 的值,然后从列表中获取唯一项。

我可以在查询之外执行所有这些操作,但如果可能的话,最好使用 JOIN 和一些花哨的字符串操作从数据库中提取数据。

简单地说,我想通过选择 1,2,31,3,4 来生成 1,2,3,4 >。 1,2,31,3,4 是 GROUP_CONCAT 在两次连接表上的结果。我可以做到这一点:

SELECT CONCAT_WS(
    ",",
    "1,2,3", 
    "1,3,4"
)

哪个输出1,2,3,1,3,4

我希望能够做类似的事情:

-- NOTE TO SKIM READERS: THIS QUERY WILL NOT WORK
SELECT 
    SORT_LIST( 
        DISTINCT
        CONCAT_WS(
            ",",
            "1,2,3", 
            "1,3,4"
        )
    )
-- NOTE TO SKIM READERS: THIS QUERY WILL NOT WORK

但我在 MySQL 中找不到类似的东西。

1,2,31,3,4已经用GROUP_CONCAT( DISTINCTcol)生产了

【问题讨论】:

单列中是否有逗号分隔值?有更好的方法来存储这些数据,这会使这个查询更直接。这是一个选择吗? 我正在加入另一个表,该表的值 A=1,B=2B=1,A=2 不同行。所以我加入了两次并选择CONCAT( A,B ),然后选择CONCAT( B,A ),然后选择CONCAT,结果是“12,12”。问题的排序方面不太重要,这确实是我需要解决的独特/独特方面 "1,2,3" 和 "1,3,4" 是两个字符串,它们不匹配,你想把它们当作整数 1,2,3 和 1,3,4 ,我认为如果不编写自定义函数是不可能的。 好的,我已经找到了解决方法,我必须在子查询中的 UNION 中完全选择我的 2 个表中的所有行,然后加入一个 ID 以限制它们但这意味着我可以在子查询的结果上使用GROUP_CONCAT( DISTINCT... ),这给了我想要的:pastebin.com/NTh2CfuD 【参考方案1】:

正如我在评论中所说,我想出了一种方法来使用子查询来实现不同的串联字符串列表:

DROP TABLE IF EXISTS `test1234`;
CREATE TABLE `test1234` (
    `val` int(1),
    `type` varchar(1)
);

INSERT INTO `test1234` VALUES
( 1, 'a' ),
( 2, 'a' ),
( 3, 'a' ),
( 1, 'b' ),
( 3, 'b' ),
( 4, 'b' );

SELECT GROUP_CONCAT( `val` ) AS `vals`
FROM (
        (
                SELECT `val` FROM `test1234` WHERE `type` = 'a'
        ) UNION DISTINCT (
                SELECT `val` FROM `test1234` WHERE `type` = 'b'
        )
) AS `test`;
DROP TABLE IF EXISTS `test1234`;

这个选择了1,2,3,4

【讨论】:

以上是关于mysql 查询某个字段出现两次的数据的主要内容,如果未能解决你的问题,请参考以下文章

位运算-异或运算-只出现一次的数字-给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素

只出现一次的数字 [LeetCode]

leetcode136. 只出现一次的数字

leetcode136. 只出现一次的数字

136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数

MySQL中判断某个字段的值是否为空NULL