我有像
这样的表格+---+----+
|TID|DATA|
+---+----+
|1 |C |
+---+----+
|1 |F |
+---+----+
|1 |D |
+---+----+
|1 |E |
+---+----+
|2 |X |
+---+----+
|2 |C |
+---+----+
|2 |B |
+---+----+
|2 |F |
+---+----+
|3 |C |
+---+----+
我想根据数据C和F组的组合来计算频率
因此数据C
和F
的计数结果将类似于= 2.(显示在tid 1和2上)
这是我的查询
select count(data) from tabel where data like '%C%' and '%F%' group by tid
它没有返回所需的结果
是否可以在mysql中查询结果?或者我需要先在程序中操作它? (我正在使用vb net)
'更新要求
我想动态创建组合。有可能这样做吗?我想使用while
来遍历if statement
。但它没有返回任何结果并给我一个错误
这是我的代码。这仍然是错误,我认为原因是因为我无法在ALIAS COLUMN
上使用IF CONDITIONAL
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
这就是我想做的事情,迭代IF CONDITIONAL
到WHILE
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可以替代我的要求
答案 0 :(得分:1)
您应该使用OR
代替AND
select count(data) from tabel where data like '%C%' OR '%F%' group by tid
答案 1 :(得分:1)
试试这个:
SELECT SUM(cnt)
FROM(SELECT tid, COUNT(DISTINCT a.data) cnt
FROM tabel a
WHERE a.data IN ('C', 'F')
GROUP BY tid HAVING COUNT(DISTINCT a.data) = 2
) AS A
答案 2 :(得分:1)
试试这个:
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