Простое среднее с фильтром, если необходимо (Swift 4.2):
let items: [Double] = [0,10,15]
func average(nums: [Double]) -> Double {
let sum = nums.reduce((total: 0, elements: 0)) { (sum, item) -> (total: Double, elements: Double) in
var result = sum
if item > 0 { // example for filter
result.total += item
result.elements += 1
}
return result
}
return sum.elements > 0 ? sum.total / sum.elements : 0
}
let theAvarage = average(nums: items)
LIKE может выполнять сопоставление по шаблону:
SELECT foo FROM bar WHERE foobar LIKE "Foo%"
Если сопоставление с образцом не требуется, используйте = вместо LIKE. Это быстрее и безопаснее. (Вы ведь используете параметризованные запросы?)
= в SQL выполняет точное сопоставление.
LIKE выполняет сопоставление с подстановочными знаками, используя «%» в качестве символа совпадения нескольких символов и «_» в качестве одно- символ совпадения символов. '\' - это escape-символ по умолчанию.
foobar = '$ foo'
и foobar LIKE '$ foo'
будут вести себя одинаково, потому что ни одна строка не содержит подстановочных знаков.
foobar LIKE '% foo'
будет соответствовать всему, что заканчивается на 'foo'.
LIKE
также имеет предложение ESCAPE
, чтобы вы могли установить escape-символ. Это позволит вам сопоставить буквальные символы "%" или "_" внутри строки. Вы также можете сделать NOT LIKE
.
На сайте MySQL есть документация по оператору LIKE . Синтаксис:
expression [NOT] LIKE pattern [ESCAPE 'escape']
I think in term of speed = is faster than LIKE. As stated, = does an exact match and LIKE can use a wildcard if needed.
I always use = sign whenever I know the values of something. For example
select * from state where state='PA'
Then for likes I use things like:
select * from person where first_name like 'blah%' and last_name like 'blah%'
If you use Oracle Developers Tool, you can test it with Explain to determine the impact on the database.
Согласно справочной странице MYSQL , конечные пробелы значимы в LIKE, но не =, и вы можете использовать подстановочные знаки,% для любых символов и _ только для одного символа. .
Конечный результат будет таким же, но обработчик запросов использует другую логику для получения ответа. Как правило, запросы LIKE сжигают больше циклов, чем запросы "=". Но когда подстановочный знак не указан, я не уверен, как оптимизатор может это обработать.
С примером в вашем вопросе нет никакой разницы.
Но, как сказал Джесси, вы можете выполнить сопоставление с подстановочными знаками
SELECT foo FROM bar WHERE foobar LIKE "Foo%"
SELECT foo FROM bar WHERE foobar NOT LIKE "%Foo%"
Подробнее:
http: //dev.mysql .com / doc / refman / 5.0 / en / string-compare-functions.html
A little bit og google doesn't hurt...
A WHERE clause with equal sign (=) works fine if we want to do an exact match. But there may be a requirement where we want to filter out all the results where 'foobar' should contain "foo". This can be handled using SQL LIKE clause alongwith WHERE clause.
If SQL LIKE clause is used along with % characters then it will work like a wildcard.
SELECT foo FROM bar WHERE foobar LIKE'$foo%'
Without a % character LIKE clause is very similar to equal sign alongwith WHERE clause.
В вашем примере они семантически равны и должны возвращать одинаковые выходные данные.
Однако LIKE даст вам возможность сопоставления с шаблоном с помощью подстановочных знаков.
Также следует отметить, что = может повысить производительность в некоторых системах, поэтому, если вы, например, ищете точное число, = будет предпочтительным методом.
Looks very much like taken out from a PHP script. The intention was to pattern-match the contents of variable $foo
against the foo
database field, but I bet it was supposed to be written in double quotes, so the contents of $foo would be fed into the query.
As you put it, there is NO difference.
It could potentially be slower but I bet MySQL realises there are no wildcard characters in the search string, so it will not do LIKE patter-matching after all, so really, no difference.