Получение данных для графика гистограммы

Альтернативные алгоритмы для взгляда на agrep ( статья в Википедии о agrep), FASTA и BLAST биологические алгоритмы соответствия последовательности. Это особые случаи приблизительное сопоставление строк , также в Каменный алгоритм repositry Ручья. Если можно определить способы, которыми строки отличаются друг от друга, Вы могли бы, вероятно, сфокусироваться на адаптированном алгоритме. Например, aspell использует некоторый вариант "подобных звуку" (soundex-метафон) расстояние в сочетании с расстоянием "клавиатуры" для размещения плохих спеллеров и плохих печатающих устройств одинаково.

74
задан huysentruitw 31 December 2015 в 15:31
поделиться

3 ответа

SELECT b.*,count(*) as total FROM bins b 
left outer join table1 a on a.value between b.min_value and b.max_value 
group by b.min_value

Ячейки таблицы содержат столбцы min_value и max_value, которые определяют ячейки. обратите внимание, что оператор «соединить ... на x МЕЖДУ y и z» является включительным.

table1 - это имя таблицы данных

16
ответ дан 24 November 2019 в 11:49
поделиться

Ответ Офри Равива очень близок, но неверен. Счетчик (*) будет 1 , даже если есть нулевые результаты в интервале гистограммы. Запрос необходимо изменить, чтобы использовать условную сумму :

SELECT b.*, SUM(a.value IS NOT NULL) AS total FROM bins b
  LEFT JOIN a ON a.value BETWEEN b.min_value AND b.max_value
GROUP BY b.min_value;
11
ответ дан 24 November 2019 в 11:49
поделиться

Я создал процедуру, которую можно использовать для автоматического создания временной таблицы для ячеек в соответствии с указанным числом или размером для последующего использования с решением Офри Равива.

CREATE PROCEDURE makebins(numbins INT, binsize FLOAT) # binsize may be NULL for auto-size
BEGIN
 SELECT FLOOR(MIN(colval)) INTO @binmin FROM yourtable;
 SELECT CEIL(MAX(colval)) INTO @binmax FROM yourtable;
 IF binsize IS NULL 
  THEN SET binsize = CEIL((@binmax-@binmin)/numbins); # CEIL here may prevent the potential creation a very small extra bin due to rounding errors, but no good where floats are needed.
 END IF;
 SET @currlim = @binmin;
 WHILE @currlim + binsize < @binmax DO
  INSERT INTO bins VALUES (@currlim, @currlim+binsize);
  SET @currlim = @currlim + binsize;
 END WHILE;
 INSERT INTO bins VALUES (@currlim, @maxbin);
END;

DROP TABLE IF EXISTS bins; # be careful if you have a bins table of your own.
CREATE TEMPORARY TABLE bins (
minval INT, maxval INT, # or FLOAT, if needed
KEY (minval), KEY (maxval) );# keys could perhaps help if using a lot of bins; normally negligible

CALL makebins(20, NULL);  # Using 20 bins of automatic size here. 

SELECT bins.*, count(*) AS total FROM bins
LEFT JOIN yourtable ON yourtable.value BETWEEN bins.minval AND bins.maxval
GROUP BY bins.minval

Это сгенерирует счетчик гистограмм только для заполненных интервалов. Дэвид Уэст должен быть прав в своем исправлении, но по какой-то причине незаселенные корзины не появляются в результате для меня (несмотря на использование ЛЕВОГО СОЕДИНЕНИЯ - я не понимаю, почему).

4
ответ дан 24 November 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: