mysql 计算行中非唯一数据的组合

标签 mysql sql select group-by having

我有这样的 table

+---+----+
|TID|DATA|
+---+----+
|1  |C   |
+---+----+
|1  |F   |
+---+----+
|1  |D   |
+---+----+
|1  |E   |
+---+----+
|2  |X   |
+---+----+
|2  |C   |
+---+----+
|2  |B   |
+---+----+
|2  |F   |
+---+----+
|3  |C   |
+---+----+

我想根据数据 C 和 F 组的 tid 来计算频率

因此数据 CF 的计数结果将类似于 = 2。(出现在 tid 1 和 2 上)

这是我的问题

select count(data) from tabel where data like '%C%' and '%F%' group by tid

它没有返回想要的结果

是否可以像mysql那样查询结果?或者我需要先在程序中操作它? (我正在使用 vb 网络)

'更新要求

我想动态创建组合。有可能这样做吗?我想使用 while 遍历 if 语句。但它没有返回任何结果并给了我一个错误

这是我的代码。它仍然是错误,我认为原因是因为我不能在 IF CONDITIONAL

上使用 ALIAS COLUMN
select count(*) from (
select kode_faktur,


if `DATA` like '%F%' and '%B%' then 1
else 0
end if

AS freq

FROM `table`
GROUP BY tid
HAVING freq = 2
) t

这就是我想做的,通过 WHILE 迭代 IF CONDITIONAL

select count(*) from (
select kode_faktur,

while i<x
if `DATA` like '%i%' then 1
else 0
end if

AS freq

FROM `table`
GROUP BY tid
HAVING freq = x
) t

这是来自@Aziz Shaikh 的原始代码,这段代码有效

SELECT COUNT(*) FROM (
SELECT tid,
SUM(CASE 
   WHEN `data` LIKE '%C%' THEN 1 
   WHEN `data` LIKE '%F%' THEN 1 
   ELSE 0 
   END
) AS freq
FROM `table`
GROUP BY tid
HAVING freq = 2
) t

我个人认为这在 mysql 中太复杂了。我选择这样做是为了节省我的时间,而不是在程序中编写一些代码。原因是因为我的程序已经使用了太多的连接并且还在处理大数据。所以我认为 mysql 可以作为我的需求的替代品

最佳答案

试试这个:

SELECT COUNT(*) FROM (
 SELECT tid,
   SUM(CASE 
       WHEN `data` LIKE '%C%' THEN 1 
       WHEN `data` LIKE '%F%' THEN 1 
       ELSE 0 
       END
   ) AS freq
 FROM `table`
 GROUP BY tid
 HAVING freq = 2
) t

关于mysql 计算行中非唯一数据的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21084980/

相关文章:

php - 仅更新已由用户修改或添加的字段

mysql - SQL UPDATE如何匹配比类似SELECT更多的行?

php - 从数据库中填充选择字段

sql - 尝试在 SQL 2008 中生成插入数据脚本时绕过循环外键错误

sql - 以保证数据库一致性的方式生成一组包含单个表转储的文件

mysql - 如何在唯一选择中获取条目数和列名?

javascript - 选择 onChange 在表单内不起作用

php - PHP 中 MySQL DECIMAL 数据类型的数学运算

java - 无法解析配置 :/hibernate. cfg.xml hibernate.sourceforge.net

mysql - Grails:无法从子查询中解析 List 属性