что такое количество (*) % 2 = 1

Я вижу запрос как

select *
from Table1
group by Step
having count(*) % 2 = 1

О чем прием having count(*) % 2 = 1

Кто-либо может объяснить?

править: Каковы области общего использования?

6
задан iamdave 22 December 2016 в 09:34
поделиться

8 ответов

Well % - это оператор modulo, который дает остаток деления, поэтому он дает 0, когда число точно делится на 2 (четное) и 1, когда нет (например, нечетное). Таким образом, запрос в основном выбирает элементы, для которых счетчик нечетный (как было сказано выше).

21
ответ дан 8 December 2019 в 02:11
поделиться

Разве это не было бы проверкой, если бы у вас было нечетное количество записей на каждом шаге?

15
ответ дан 8 December 2019 в 02:11
поделиться

Она вернет все ступени, которые имели нечетное количество строк.

4
ответ дан 8 December 2019 в 02:11
поделиться
[

] просто протестируйте его[

] [
declare @t1 table (step char(1))
insert into @t1(step)
select 'a'
union all select 'b'
union all select 'b'
union all select 'c'
union all select 'c'
union all select 'c'
union all select 'd'
union all select 'd'
union all select 'd'
union all select 'd'


select * from @t1
group by step
having count(*)%2 = 1
] [

], который вернет значения шага колонки, которые существуют, прибавив количество раз[

] [

] в этом примере он вернет[

] [
'a'
'c'
] [

] здесь [] select *[] путает, и я бы предпочел написать его как[

] [
select step from @t1
group by step
having count(*)%2 = 1
] [

] или даже для большей видимости [

] [
select step, count(*) from @t1
group by step
having count(*)%2 = 1
]
2
ответ дан 8 December 2019 в 02:11
поделиться

Причина для этого:

Скажем, вы хотите разделить нечетные и четные записи на две колонки. Вы можете использовать четную для одной из них, а нечетную для другой.

Я также поместил это в комментарий, но не получил ответа.

1
ответ дан 8 December 2019 в 02:11
поделиться

Мы не можем ответить на ваш вопрос, не зная, для чего используются эти таблицы.

Для заданного "шага" может оказаться, что необходимо иметь равное количество "чего-то" и в результате получится список элементов, которые будут отображаться в некотором интерфейсе, где это не так.

Пример: Давайте на мгновение забудем о "Шагах" и предположим, что это была таблица учеников и что "Шаг" был вместо "Группы", в которые разбиты ученики. Требованием к группе является четное количество учеников, потому что ученики будут работать парами. Для инструмента администрирования вы можете написать запрос, как этот, чтобы увидеть список групп, где это не так.

Группа: Посчитать A, 10 B, 9 C, 17 D, 8 E, 4 F, 5

И запрос вернет группы B, C, F

.
1
ответ дан 8 December 2019 в 02:11
поделиться

COUNT(*) будет считать все строки в базе данных. Символ % - это символ модуля, который даст вам оставшуюся часть проблемы деления. Таким образом, это деление всех строк на две и возврат тех, которые имеют остаток в 1 (т.е. нечетное количество строк.)

Как заметил Эрик, это будут не все строки, а те, которые сгруппированы пошагово, т.е. это будут все нечетные строки на шаг.

1
ответ дан 8 December 2019 в 02:11
поделиться
[

] Спасибо всем. Все вы сказали, что запрос возвращает сгруппированные строки, которые имеют нечетное количество.[

] [

]но это не важно! Я продолжу проверять этот случай и напишу причину в голове программиста (если найду, кто это напишет)[

] [

]Уроки выучились: Программисты должны писать комментарии о такой глупой логике...[

].
0
ответ дан 8 December 2019 в 02:11
поделиться
Другие вопросы по тегам:

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